aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/merchant-backoffice-ui/src')
-rw-r--r--packages/merchant-backoffice-ui/src/Application.tsx75
-rw-r--r--packages/merchant-backoffice-ui/src/Routing.tsx108
-rw-r--r--packages/merchant-backoffice-ui/src/components/Amount.tsx107
-rw-r--r--packages/merchant-backoffice-ui/src/components/ErrorLoadingMerchant.tsx243
-rw-r--r--packages/merchant-backoffice-ui/src/components/exception/QR.tsx13
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx16
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputArray.tsx92
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx2
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputDate.tsx10
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx15
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputImage.tsx13
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx1
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx93
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputSearchOnList.tsx4
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputSelector.tsx16
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputStock.tsx14
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx50
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/InputToggle.tsx1
-rw-r--r--packages/merchant-backoffice-ui/src/components/form/JumpToElementById.tsx91
-rw-r--r--packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx6
-rw-r--r--packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx50
-rw-r--r--packages/merchant-backoffice-ui/src/components/menu/index.tsx6
-rw-r--r--packages/merchant-backoffice-ui/src/components/modal/index.tsx374
-rw-r--r--packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx2
-rw-r--r--packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx56
-rw-r--r--packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx151
-rw-r--r--packages/merchant-backoffice-ui/src/components/product/ProductList.tsx10
-rw-r--r--packages/merchant-backoffice-ui/src/components/tokenfamily/TokenFamilyForm.tsx66
-rw-r--r--packages/merchant-backoffice-ui/src/context/session.ts25
-rw-r--r--packages/merchant-backoffice-ui/src/declaration.d.ts1634
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/async.ts10
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/bank.ts19
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/category.ts78
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/instance.ts44
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/order.ts14
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/otp.ts14
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/preference.ts3
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/product.ts44
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/templates.ts17
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts38
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/transfer.ts7
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/urls.ts31
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/webhooks.ts14
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/de.po3645
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/en.po2948
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/es.po4400
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/fr.po3854
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/it.po2966
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/strings.ts14066
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/sv.po2965
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/taler-merchant-backoffice.pot2928
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/tr.po3696
-rw-r--r--packages/merchant-backoffice-ui/src/i18n/uk.po4236
-rw-r--r--packages/merchant-backoffice-ui/src/lang.ts126
-rw-r--r--packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx217
-rw-r--r--packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx14
-rw-r--r--packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx37
-rw-r--r--packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx11
-rw-r--r--packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx4
-rw-r--r--packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx83
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx77
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx42
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx60
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx38
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx71
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx89
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx45
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/create/Create.stories.tsx (renamed from packages/merchant-backoffice-ui/src/paths/instance/accounts/list/List.stories.tsx)6
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/create/CreatePage.tsx103
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx77
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/list/Table.tsx205
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx113
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/update/Update.stories.tsx (renamed from packages/merchant-backoffice-ui/src/paths/instance/templates/list/List.stories.tsx)10
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/update/UpdatePage.tsx162
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/categories/update/index.tsx114
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx83
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx90
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx87
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/index.stories.ts1
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx18
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx86
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx71
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx129
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx52
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx54
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx55
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx18
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx46
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx65
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx43
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx33
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/List.stories.tsx28
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx59
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx18
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx75
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx50
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx7
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx72
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx26
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx34
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx75
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx93
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx60
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx27
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx60
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx31
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx63
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx22
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx88
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx93
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx31
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx56
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx53
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx8
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx79
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/token/DetailPage.tsx25
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx27
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx27
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/Table.tsx12
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx94
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/UpdatePage.tsx47
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx47
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx35
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx23
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx8
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx29
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx2
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx34
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx4
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx114
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx25
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx23
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx33
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx25
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx28
-rw-r--r--packages/merchant-backoffice-ui/src/paths/login/index.tsx14
-rw-r--r--packages/merchant-backoffice-ui/src/paths/notfound/index.tsx2
-rw-r--r--packages/merchant-backoffice-ui/src/paths/settings/index.tsx23
-rw-r--r--packages/merchant-backoffice-ui/src/schemas/index.ts278
-rw-r--r--packages/merchant-backoffice-ui/src/scss/_aside.scss7
-rw-r--r--packages/merchant-backoffice-ui/src/scss/toggle.scss6
-rw-r--r--packages/merchant-backoffice-ui/src/settings.json3
-rw-r--r--packages/merchant-backoffice-ui/src/type-override.d.ts (renamed from packages/merchant-backoffice-ui/src/paths/instance/transfers/update/index.tsx)20
-rw-r--r--packages/merchant-backoffice-ui/src/utils/table.ts2
144 files changed, 38467 insertions, 15774 deletions
diff --git a/packages/merchant-backoffice-ui/src/Application.tsx b/packages/merchant-backoffice-ui/src/Application.tsx
index 5be21ff8f..43598ce91 100644
--- a/packages/merchant-backoffice-ui/src/Application.tsx
+++ b/packages/merchant-backoffice-ui/src/Application.tsx
@@ -41,6 +41,7 @@ import { SWRConfig } from "swr";
import { Routing } from "./Routing.js";
import { Loading } from "./components/exception/loading.js";
import { NotificationCard } from "./components/menu/index.js";
+import { SessionContextProvider } from "./context/session.js";
import { SettingsProvider } from "./context/settings.js";
import {
revalidateBankAccountDetails,
@@ -52,6 +53,10 @@ import {
revalidateManagedInstanceDetails,
} from "./hooks/instance.js";
import {
+ revalidateInstanceOrders,
+ revalidateOrderDetails,
+} from "./hooks/order.js";
+import {
revalidateInstanceOtpDevices,
revalidateOtpDeviceDetails,
} from "./hooks/otp.js";
@@ -63,6 +68,10 @@ import {
revalidateInstanceTemplates,
revalidateTemplateDetails,
} from "./hooks/templates.js";
+import {
+ revalidateTokenFamilies,
+ revalidateTokenFamilyDetails,
+} from "./hooks/tokenfamily.js";
import { revalidateInstanceTransfers } from "./hooks/transfer.js";
import {
revalidateInstanceWebhooks,
@@ -74,11 +83,7 @@ import {
buildDefaultBackendBaseURL,
fetchSettings,
} from "./settings.js";
-import {
- revalidateInstanceOrders,
- revalidateOrderDetails,
-} from "./hooks/order.js";
-import { SessionContextProvider } from "./context/session.js";
+import { revalidateInstanceCategories } from "./hooks/category.js";
const WITH_LOCAL_STORAGE_CACHE = false;
export function Application(): VNode {
@@ -95,6 +100,7 @@ export function Application(): VNode {
source={strings}
completeness={{
es: strings["es"].completeness,
+ uk: strings["uk"].completeness,
de: strings["de"].completeness,
}}
>
@@ -193,7 +199,9 @@ function localStorageProvider(): Map<unknown, unknown> {
function OnConfigError({
state,
}: {
- state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;
+ state:
+ | ConfigResultFail<TalerMerchantApi.TalerMerchantConfigResponse>
+ | undefined;
}): VNode {
const { i18n } = useTranslationContext();
if (!state) {
@@ -274,19 +282,38 @@ const swrCacheEvictor = new (class
await Promise.all([revalidateInstanceBankAccounts()]);
return;
}
+ case TalerMerchantInstanceCacheEviction.CREATE_CATEGORY: {
+ await Promise.all([revalidateInstanceCategories()]);
+ return;
+ }
+ case TalerMerchantInstanceCacheEviction.UPDATE_CATEGORY: {
+ await Promise.all([revalidateInstanceCategories()]);
+ return;
+ }
+ case TalerMerchantInstanceCacheEviction.DELETE_CATEGORY: {
+ await Promise.all([revalidateInstanceCategories()]);
+ return;
+ }
case TalerMerchantInstanceCacheEviction.CREATE_PRODUCT: {
- await Promise.all([revalidateInstanceProducts()]);
+ await Promise.all([
+ revalidateInstanceProducts(),
+ revalidateInstanceCategories(),
+ ]);
return;
}
case TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT: {
await Promise.all([
revalidateProductDetails(),
revalidateInstanceProducts(),
+ revalidateInstanceCategories(),
]);
return;
}
case TalerMerchantInstanceCacheEviction.DELETE_PRODUCT: {
- await Promise.all([revalidateInstanceProducts()]);
+ await Promise.all([
+ revalidateInstanceProducts(),
+ revalidateInstanceCategories(),
+ ]);
return;
}
case TalerMerchantInstanceCacheEviction.CREATE_TRANSFER: {
@@ -345,23 +372,21 @@ const swrCacheEvictor = new (class
await Promise.all([revalidateInstanceOrders()]);
return;
}
- case TalerMerchantInstanceCacheEviction.LAST:
- // case TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY:{
- // await Promise.all([
- // reva
- // ])
- // return
- // }
- // case TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY:{
- // await Promise.all([
- // ])
- // return
- // }
- // case TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY:{
- // await Promise.all([
- // ])
- // return
- // }
+ case TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY: {
+ await Promise.all([revalidateTokenFamilies()]);
+ return;
+ }
+ case TalerMerchantInstanceCacheEviction.UPDATE_TOKENFAMILY: {
+ await Promise.all([revalidateTokenFamilyDetails()]);
+ return;
+ }
+ case TalerMerchantInstanceCacheEviction.DELETE_TOKENFAMILY: {
+ await Promise.all([revalidateTokenFamilies()]);
+ return;
+ }
+ case TalerMerchantInstanceCacheEviction.LAST: {
+ return;
+ }
}
}
})();
diff --git a/packages/merchant-backoffice-ui/src/Routing.tsx b/packages/merchant-backoffice-ui/src/Routing.tsx
index ae9078678..de87db298 100644
--- a/packages/merchant-backoffice-ui/src/Routing.tsx
+++ b/packages/merchant-backoffice-ui/src/Routing.tsx
@@ -73,9 +73,11 @@ import WebhookCreatePage from "./paths/instance/webhooks/create/index.js";
import WebhookListPage from "./paths/instance/webhooks/list/index.js";
import WebhookUpdatePage from "./paths/instance/webhooks/update/index.js";
import { LoginPage } from "./paths/login/index.js";
-import { NotFoundPage } from "./paths/notfound/index.js";
import { Settings } from "./paths/settings/index.js";
import { Notification } from "./utils/types.js";
+import ListCategories from "./paths/instance/categories/list/index.js";
+import CreateCategory from "./paths/instance/categories/create/index.js";
+import UpdateCategory from "./paths/instance/categories/update/index.js";
export enum InstancePaths {
error = "/error",
@@ -86,6 +88,10 @@ export enum InstancePaths {
bank_update = "/bank/:bid/update",
bank_new = "/bank/new",
+ category_list = "/category",
+ category_update = "/category/:cid/update",
+ category_new = "/category/new",
+
inventory_list = "/inventory",
inventory_update = "/inventory/:pid/update",
inventory_new = "/inventory/new",
@@ -120,9 +126,6 @@ export enum InstancePaths {
interface = "/interface",
}
-// eslint-disable-next-line @typescript-eslint/no-empty-function
-// const noop = () => { };
-
export enum AdminPaths {
list_instances = "/instances",
new_instance = "/instance/new",
@@ -303,6 +306,39 @@ export function Routing(_p: Props): VNode {
}}
/>
{/**
+ * Category pages
+ */}
+ <Route
+ path={InstancePaths.category_list}
+ component={ListCategories}
+ onCreate={() => {
+ route(InstancePaths.category_new);
+ }}
+ onSelect={(id: string) => {
+ route(InstancePaths.category_update.replace(":cid", id));
+ }}
+ />
+ <Route
+ path={InstancePaths.category_update}
+ component={UpdateCategory}
+ onConfirm={() => {
+ route(InstancePaths.category_list);
+ }}
+ onBack={() => {
+ route(InstancePaths.category_list);
+ }}
+ />
+ <Route
+ path={InstancePaths.category_new}
+ component={CreateCategory}
+ onConfirm={() => {
+ route(InstancePaths.category_list);
+ }}
+ onBack={() => {
+ route(InstancePaths.category_list);
+ }}
+ />
+ {/**
* Inventory pages
*/}
<Route
@@ -574,13 +610,19 @@ export function Routing(_p: Props): VNode {
}}
/>
- <Route path={InstancePaths.kyc} component={ListKYCPage} />
+ <Route
+ path={InstancePaths.kyc}
+ component={ListKYCPage}
+ // onSelect={(id: string) => {
+ // route(InstancePaths.bank_update.replace(":bid", id));
+ // }}
+ />
<Route path={InstancePaths.interface} component={Settings} />
{/**
* Example pages
*/}
<Route path="/loading" component={Loading} />
- <Route default component={NotFoundPage} />
+ <Route default component={Redirect} to={InstancePaths.order_list} />
</Router>
</Fragment>
);
@@ -597,53 +639,9 @@ function AdminInstanceUpdatePage({
id,
...rest
}: { id: string } & InstanceUpdatePageProps): VNode {
- // const { i18n } = useTranslationContext();
-
return (
<Fragment>
- <InstanceAdminUpdatePage
- {...rest}
- instanceId={id}
- // onLoadError={(error: HttpError<TalerErrorDetail>) => {
- // const notif =
- // error.type === ErrorType.TIMEOUT
- // ? {
- // message: i18n.str`The request to the backend take too long and was cancelled`,
- // description: i18n.str`Diagnostic from ${error.info.url} is '${error.message}'`,
- // type: "ERROR" as const,
- // }
- // : {
- // message: i18n.str`The backend reported a problem: HTTP status #${error.status}`,
- // description: i18n.str`Diagnostic from ${error.info.url} is '${error.message}'`,
- // details:
- // error.type === ErrorType.CLIENT ||
- // error.type === ErrorType.SERVER
- // ? error.payload.hint
- // : undefined,
- // type: "ERROR" as const,
- // };
- // return (
- // <Fragment>
- // <NotificationCard notification={notif} />
- // <LoginPage />
- // </Fragment>
- // );
- // }}
- // onUnauthorized={() => {
- // return (
- // <Fragment>
- // <NotificationCard
- // notification={{
- // message: i18n.str`Access denied`,
- // description: i18n.str`The access token provided is invalid`,
- // type: "ERROR",
- // }}
- // />
- // <LoginPage />
- // </Fragment>
- // );
- // }}
- />
+ <InstanceAdminUpdatePage {...rest} instanceId={id} />
</Fragment>
);
}
@@ -696,8 +694,10 @@ function KycBanner(): VNode {
kycStatus !== undefined &&
!(kycStatus instanceof TalerError) &&
kycStatus.type === "ok" &&
- !!kycStatus.body;
-
+ !!kycStatus.body &&
+ kycStatus.body.kyc_data.findIndex(
+ (d) => d.payto_kycauths !== undefined || d.access_token !== undefined,
+ ) !== -1;
const hidden = AbsoluteTime.cmp(now, prefs.hideKycUntil) < 1;
if (hidden || !needsToBeShown) return <Fragment />;
@@ -708,7 +708,7 @@ function KycBanner(): VNode {
<NotificationCard
notification={{
type: "WARN",
- message: "KYC verification needed",
+ message: i18n.str`KYC verification needed`,
description: (
<div>
<p>
diff --git a/packages/merchant-backoffice-ui/src/components/Amount.tsx b/packages/merchant-backoffice-ui/src/components/Amount.tsx
new file mode 100644
index 000000000..09f65473c
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/components/Amount.tsx
@@ -0,0 +1,107 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+import {
+ amountFractionalBase,
+ amountFractionalLength,
+ AmountJson,
+ Amounts,
+ AmountString,
+} from "@gnu-taler/taler-util";
+import { Fragment, h, VNode } from "preact";
+
+export function Amount({
+ value,
+ maxFracSize,
+ negative,
+ hideCurrency,
+ signType = "standard",
+ signDisplay = "auto",
+}: {
+ negative?: boolean;
+ value: AmountJson | AmountString;
+ maxFracSize?: number;
+ hideCurrency?: boolean;
+ signType?: "accounting" | "standard";
+ signDisplay?: "auto" | "always" | "never" | "exceptZero";
+}): VNode {
+ const aj = Amounts.jsonifyAmount(value);
+ const minFractional =
+ maxFracSize !== undefined && maxFracSize < 2 ? maxFracSize : 2;
+ const af = aj.fraction % amountFractionalBase;
+ let s = "";
+ if ((af && maxFracSize) || minFractional > 0) {
+ s += ".";
+ let n = af;
+ for (
+ let i = 0;
+ (maxFracSize === undefined || i < maxFracSize) &&
+ i < amountFractionalLength;
+ i++
+ ) {
+ if (!n && i >= minFractional) {
+ break;
+ }
+ s = s + Math.floor((n / amountFractionalBase) * 10).toString();
+ n = (n * 10) % amountFractionalBase;
+ }
+ }
+ const fontSize = 18;
+ const letterSpacing = 0;
+ const mult = 0.7;
+ return (
+ <span style={{ textAlign: "right", whiteSpace: "nowrap" }}>
+ <span
+ style={{
+ display: "inline-block",
+ fontFamily: "monospace",
+ fontSize,
+ }}
+ >
+ {negative ? (signType === "accounting" ? "(" : "-") : ""}
+ <span
+ style={{
+ display: "inline-block",
+ textAlign: "right",
+ fontFamily: "monospace",
+ fontSize,
+ letterSpacing,
+ }}
+ >
+ {aj.value}
+ </span>
+ <span
+ style={{
+ display: "inline-block",
+ width: !maxFracSize ? undefined : `${(maxFracSize + 1) * mult}em`,
+ textAlign: "left",
+ fontFamily: "monospace",
+ fontSize,
+ letterSpacing,
+ }}
+ >
+ {s}
+ {negative && signType === "accounting" ? ")" : ""}
+ </span>
+ </span>
+ {hideCurrency ? undefined : (
+ <Fragment>
+ &nbsp;
+ <span>{aj.currency}</span>
+ </Fragment>
+ )}
+ </span>
+ );
+}
diff --git a/packages/merchant-backoffice-ui/src/components/ErrorLoadingMerchant.tsx b/packages/merchant-backoffice-ui/src/components/ErrorLoadingMerchant.tsx
index b1d1cac66..c1a1bcf2e 100644
--- a/packages/merchant-backoffice-ui/src/components/ErrorLoadingMerchant.tsx
+++ b/packages/merchant-backoffice-ui/src/components/ErrorLoadingMerchant.tsx
@@ -1,7 +1,6 @@
/*
-/*
This file is part of GNU Taler
- (C) 2022 Taler Systems S.A.
+ (C) 2021-2024 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -15,115 +14,175 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { TalerError, TalerErrorCode, assertUnreachable } from "@gnu-taler/taler-util";
+import { TalerError, TalerErrorCode } from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { Fragment, VNode, h } from "preact";
+import { VNode, h } from "preact";
import { NotificationCard } from "./menu/index.js";
/**
* equivalent to ErrorLoading for merchant-backoffice which uses notification-card
- * @param param0
- * @returns
+ * @param param0
+ * @returns
*/
-export function ErrorLoadingMerchant({ error, showDetail }: { error: TalerError, showDetail?: boolean }): VNode {
- const { i18n } = useTranslationContext()
+export function ErrorLoadingMerchant({
+ error,
+}: {
+ error: TalerError;
+ showDetail?: boolean;
+}): VNode {
+ const { i18n } = useTranslationContext();
switch (error.errorDetail.code) {
//////////////////
// Every error that can be produce in a Http Request
//////////////////
case TalerErrorCode.GENERIC_TIMEOUT: {
if (error.hasErrorCode(TalerErrorCode.GENERIC_TIMEOUT)) {
- const { requestMethod, requestUrl, timeoutMs } = error.errorDetail
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`The request reached a timeout, check your connection.`,
- description: error.message,
- details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)
- }} />
+ const { requestMethod, requestUrl, timeoutMs } = error.errorDetail;
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`The request reached a timeout, check your connection.`,
+ description: error.message,
+ details: JSON.stringify(
+ { requestMethod, requestUrl, timeoutMs },
+ undefined,
+ 2,
+ ),
+ }}
+ />
+ );
}
- assertUnreachable(1 as never)
+ break;
}
case TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR: {
if (error.hasErrorCode(TalerErrorCode.GENERIC_CLIENT_INTERNAL_ERROR)) {
- const { requestMethod, requestUrl, timeoutMs } = error.errorDetail
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`The request was cancelled.`,
- description: error.message,
- details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)
- }} />
+ const { requestMethod, requestUrl, timeoutMs } = error.errorDetail;
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`The request was cancelled.`,
+ description: error.message,
+ details: JSON.stringify(
+ { requestMethod, requestUrl, timeoutMs },
+ undefined,
+ 2,
+ ),
+ }}
+ />
+ );
}
- assertUnreachable(1 as never)
+ break;
}
case TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT: {
- if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)) {
- const { requestMethod, requestUrl, timeoutMs } = error.errorDetail
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`The request reached a timeout, check your connection.`,
- description: error.message,
- details: JSON.stringify({ requestMethod, requestUrl, timeoutMs }, undefined, 2)
- }} />
+ if (
+ error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT)
+ ) {
+ const { requestMethod, requestUrl, timeoutMs } = error.errorDetail;
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`The request reached a timeout, check your connection.`,
+ description: error.message,
+ details: JSON.stringify(
+ { requestMethod, requestUrl, timeoutMs },
+ undefined,
+ 2,
+ ),
+ }}
+ />
+ );
}
- assertUnreachable(1 as never)
+ break;
}
case TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED: {
if (error.hasErrorCode(TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED)) {
- const { requestMethod, requestUrl, throttleStats } = error.errorDetail
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`A lot of request were made to the same server and this action was throttled.`,
- description: error.message,
- details: JSON.stringify({ requestMethod, requestUrl, throttleStats }, undefined, 2)
- }} />
+ const { requestMethod, requestUrl, throttleStats } = error.errorDetail;
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`A lot of request were made to the same server and this action was throttled.`,
+ description: error.message,
+ details: JSON.stringify(
+ { requestMethod, requestUrl, throttleStats },
+ undefined,
+ 2,
+ ),
+ }}
+ />
+ );
}
- assertUnreachable(1 as never)
+ break;
}
case TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE: {
- if (error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)) {
- const { requestMethod, requestUrl, httpStatusCode, validationError } = error.errorDetail
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`The response of the request is malformed.`,
- description: error.message,
- details: JSON.stringify({ requestMethod, requestUrl, httpStatusCode, validationError }, undefined, 2)
- }} />
+ if (
+ error.hasErrorCode(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE)
+ ) {
+ const { requestMethod, requestUrl, httpStatusCode, validationError } =
+ error.errorDetail;
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`The response of the request is malformed.`,
+ description: error.message,
+ details: JSON.stringify(
+ { requestMethod, requestUrl, httpStatusCode, validationError },
+ undefined,
+ 2,
+ ),
+ }}
+ />
+ );
}
- assertUnreachable(1 as never)
+ break;
}
case TalerErrorCode.WALLET_NETWORK_ERROR: {
if (error.hasErrorCode(TalerErrorCode.WALLET_NETWORK_ERROR)) {
- const { requestMethod, requestUrl } = error.errorDetail
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`Could not complete the request due to a network problem.`,
- description: error.message,
- details: JSON.stringify({ requestMethod, requestUrl }, undefined, 2)
- }} />
+ const { requestMethod, requestUrl } = error.errorDetail;
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`Could not complete the request due to a network problem.`,
+ description: error.message,
+ details: JSON.stringify(
+ { requestMethod, requestUrl },
+ undefined,
+ 2,
+ ),
+ }}
+ />
+ );
}
- assertUnreachable(1 as never)
+ break;
}
case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {
if (error.hasErrorCode(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR)) {
- const { requestMethod, requestUrl, httpStatusCode, errorResponse } = error.errorDetail
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`Unexpected request error.`,
- description: error.message,
- details: JSON.stringify({ requestMethod, requestUrl, httpStatusCode, errorResponse }, undefined, 2)
- }} />
+ const { requestMethod, requestUrl, httpStatusCode, errorResponse } =
+ error.errorDetail;
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`Unexpected request error.`,
+ description: error.message,
+ details: JSON.stringify(
+ { requestMethod, requestUrl, httpStatusCode, errorResponse },
+ undefined,
+ 2,
+ ),
+ }}
+ />
+ );
}
- assertUnreachable(1 as never)
+ break;
}
//////////////////
- // Every other error
+ // Every other error
//////////////////
// case TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR: {
// return <Attention type="danger" title={i18n.str``}>
@@ -133,14 +192,34 @@ export function ErrorLoadingMerchant({ error, showDetail }: { error: TalerError,
// Default message for unhandled case
//////////////////
default: {
- return <NotificationCard
- notification={{
- type: "ERROR",
- message: i18n.str`Unexpected error.`,
- description: error.message,
- details: JSON.stringify(error.errorDetail, undefined, 2)
- }} />
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`Unexpected error.`,
+ description: error.message,
+ details: JSON.stringify(error.errorDetail, undefined, 2),
+ }}
+ />
+ );
}
}
+ /**
+ * This should not happen
+ *
+ * The only reason why this is possible is because the case statement
+ * follows and if `if (error.hasErrorCode` which returned false.
+ *
+ * TODO: add a better check
+ */
+ return (
+ <NotificationCard
+ notification={{
+ type: "ERROR",
+ message: i18n.str`Unexpected error.`,
+ description: error.message,
+ details: JSON.stringify(error.errorDetail, undefined, 2),
+ }}
+ />
+ );
}
-
diff --git a/packages/merchant-backoffice-ui/src/components/exception/QR.tsx b/packages/merchant-backoffice-ui/src/components/exception/QR.tsx
index 246ce0229..ad1017257 100644
--- a/packages/merchant-backoffice-ui/src/components/exception/QR.tsx
+++ b/packages/merchant-backoffice-ui/src/components/exception/QR.tsx
@@ -25,9 +25,20 @@ export function QR({ text }: { text: string }): VNode {
qr.addData(text);
qr.make();
if (divRef.current) {
- divRef.current.innerHTML = qr.createSvgTag({
+ const image = qr.createSvgTag({
scalable: true,
});
+ const imageURL = `data:image/svg+xml,${encodeURIComponent(image)}`;
+ divRef.current.innerHTML = `<img src=${JSON.stringify(
+ imageURL,
+ )} alt=${JSON.stringify(
+ `QR Code containing the data ${text
+ .replace(/&/g, "&amp;")
+ .replace(/</g, "&lt;")
+ .replace(/>/g, "&gt;")
+ .replace(/"/g, "&quot;")
+ .replace(/'/g, "&#039;")}`,
+ )} />`;
}
});
diff --git a/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx b/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx
index a5f3c1d2f..22b45cfc6 100644
--- a/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx
@@ -19,6 +19,7 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { FacadeCredentials, Location, TalerMerchantApi, TranslatedString } from "@gnu-taler/taler-util";
import { ComponentChildren, createContext, h, VNode } from "preact";
import { useContext, useMemo } from "preact/hooks";
@@ -92,8 +93,21 @@ export function useFormContext<T>() {
return useContext<FormType<T>>(FormContext);
}
+// declare const __taler_form: unique symbol;
+export type TalerForm = {
+ __taler_form?: true;
+};
+
export type FormErrors<T> = {
- [P in keyof T]?: string | FormErrors<T[P]>;
+ [P in keyof T]?: T[P] extends Location
+ ? FormErrors<T[P]>
+ : T[P] extends FacadeCredentials
+ ? FormErrors<T[P]>
+ : T[P] extends TalerForm
+ ? FormErrors<T[P]>
+ : T[P] extends Partial<TalerForm>
+ ? FormErrors<T[P]>
+ : TranslatedString | undefined;
};
export type FormtoStr<T> = {
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx b/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx
index b0b9eaefc..9abec8630 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx
@@ -19,18 +19,21 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { h, VNode } from "preact";
+import { Fragment, h, VNode } from "preact";
import { useState } from "preact/hooks";
import { InputProps, useField } from "./useField.js";
+import { DropdownList } from "./InputSearchOnList.js";
export interface Props<T> extends InputProps<T> {
isValid?: (e: any) => boolean;
+ getSuggestion?: (e: any) => Promise<{ id: string; description: string }[]>;
addonBefore?: string;
toStr?: (v?: any) => string;
fromStr?: (s: string) => any;
+ unique?: boolean;
}
-const defaultToString = (f?: any): string => f || "";
+const defaultToString = (f?: any): string => (f ? String(f) : "");
const defaultFromString = (v: string): any => v as any;
export function InputArray<T>({
@@ -39,19 +42,20 @@ export function InputArray<T>({
placeholder,
tooltip,
label,
+ unique,
help,
addonBefore,
- isValid = () => true,
+ getSuggestion,
fromStr = defaultFromString,
toStr = defaultToString,
}: Props<keyof T>): VNode {
- const { error: formError, value, onChange, required } = useField<T>(name);
- const [localError, setLocalError] = useState<string | null>(null);
+ const { error, value, onChange, required } = useField<T>(name);
- const error = localError || formError;
-
- const array: any[] = (value ? value! : []) as any;
+ const array: T[keyof T][] = value ? value! : [];
const [currentValue, setCurrentValue] = useState("");
+ const [suggestions, setSuggestions] = useState<
+ { id: string; description: string }[]
+ >([]);
const { i18n } = useTranslationContext();
return (
@@ -83,7 +87,15 @@ export function InputArray<T>({
disabled={readonly}
name={String(name)}
value={currentValue}
- onChange={(e): void => setCurrentValue(e.currentTarget.value)}
+ onChange={async (e): Promise<void> => {
+ const v = e.currentTarget.value;
+ setCurrentValue(v);
+ if (getSuggestion) {
+ getSuggestion(v).then((ss) => {
+ setSuggestions(ss);
+ });
+ }
+ }}
/>
{required && (
<span class="icon has-text-danger is-right">
@@ -91,43 +103,57 @@ export function InputArray<T>({
</span>
)}
</p>
- <p class="control">
- <button
- class="button is-info has-tooltip-left"
- disabled={!currentValue}
- onClick={(): void => {
- const v = fromStr(currentValue);
- if (!isValid(v)) {
- setLocalError(
- i18n.str`The value ${v} is invalid for a payment url`,
- );
- return;
- }
- setLocalError(null);
- onChange([v, ...array] as any);
- setCurrentValue("");
- }}
- data-tooltip={i18n.str`add element to the list`}
- >
- <i18n.Translate>add</i18n.Translate>
- </button>
- </p>
+ {getSuggestion ? undefined : (
+ <p class="control">
+ <button
+ class="button is-info has-tooltip-left"
+ disabled={!currentValue}
+ onClick={(): void => {
+ const v = fromStr(currentValue);
+ if (!unique || array.indexOf(v) === -1) {
+ onChange([v, ...array] as T[keyof T]);
+ }
+ setCurrentValue("");
+ }}
+ data-tooltip={i18n.str`Add element to the list`}
+ >
+ <i18n.Translate>Add</i18n.Translate>
+ </button>
+ </p>
+ )}
</div>
{help}
{error && <p class="help is-danger"> {error} </p>}
+
+ {suggestions.length > 0 ? (
+ <div>
+ <DropdownList
+ name={currentValue}
+ list={suggestions}
+ onSelect={(p): void => {
+ if (!unique || array.indexOf(p as any) === -1) {
+ onChange([p, ...array] as T[keyof T]);
+ }
+ setCurrentValue("");
+ setSuggestions([]);
+ }}
+ withImage={false}
+ />
+ </div>
+ ) : undefined}
{array.map((v, i) => (
<div key={i} class="tags has-addons mt-3 mb-0">
<span
class="tag is-medium is-info mb-0"
style={{ maxWidth: "90%" }}
>
- {v}
+ {getSuggestion ? (v as any).description : toStr(v)}
</span>
<a
class="tag is-medium is-danger is-delete mb-0"
onClick={() => {
- onChange(array.filter((f) => f !== v) as any);
- setCurrentValue(toStr(v));
+ onChange(array.filter((f) => f !== v) as T[keyof T]);
+ setCurrentValue(getSuggestion ? (v as any).description : toStr(v));
}}
/>
</div>
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx b/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
index 11396b88e..ffd3bfd16 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
@@ -60,7 +60,7 @@ export function InputCurrency<T>({
expand={expand}
toStr={(v?: AmountString) => v?.split(":")[1] || ""}
fromStr={(v: string) => (!v ? undefined : `${config.currency}:${v}`)}
- inputExtra={{ min: 0 }}
+ inputExtra={{ min: 0, step: 0.001 }}
>
{children}
</InputWithAddon>
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputDate.tsx b/packages/merchant-backoffice-ui/src/components/form/InputDate.tsx
index 812505f6a..36785671b 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputDate.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputDate.tsx
@@ -124,25 +124,25 @@ export function InputDate<T>({
<span
data-tooltip={
withTimestampSupport
- ? i18n.str`change value to unknown date`
- : i18n.str`change value to empty`
+ ? i18n.str`Change value to unknown date`
+ : i18n.str`Change value to empty`
}
>
<button
class="button is-info mr-3"
onClick={() => onChange(undefined as any)}
>
- <i18n.Translate>clear</i18n.Translate>
+ <i18n.Translate>Clear</i18n.Translate>
</button>
</span>
)}
{withTimestampSupport && (
- <span data-tooltip={i18n.str`change value to never`}>
+ <span data-tooltip={i18n.str`Change value to never`}>
<button
class="button is-info"
onClick={() => onChange({ t_s: "never" } as any)}
>
- <i18n.Translate>never</i18n.Translate>
+ <i18n.Translate>Never</i18n.Translate>
</button>
</span>
)}
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx b/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx
index 080b9508e..98533a1d4 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx
@@ -52,11 +52,14 @@ export function InputDuration<T>({
const { error, required, value: anyValue, onChange } = useField<T>(name);
let strValue = "";
- const value: Duration = anyValue;
+ const value: Duration =
+ anyValue && anyValue.d_us !== undefined
+ ? Duration.fromTalerProtocolDuration(anyValue)
+ : anyValue;
if (!value) {
strValue = "";
} else if (value.d_ms === "forever") {
- strValue = i18n.str`forever`;
+ strValue = i18n.str`Forever`;
} else {
if (value.d_ms === undefined) {
throw Error(
@@ -149,22 +152,22 @@ export function InputDuration<T>({
</div>
{withForever && (
- <span data-tooltip={i18n.str`change value to never`}>
+ <span data-tooltip={i18n.str`Change value to never`}>
<button
class="button is-info mr-3"
onClick={() => onChange({ d_ms: "forever" } as any)}
>
- <i18n.Translate>forever</i18n.Translate>
+ <i18n.Translate>Forever</i18n.Translate>
</button>
</span>
)}
{!readonly && !withoutClear && (
- <span data-tooltip={i18n.str`change value to empty`}>
+ <span data-tooltip={i18n.str`Change value to empty`}>
<button
class="button is-info "
onClick={() => onChange(undefined as any)}
>
- <i18n.Translate>clear</i18n.Translate>
+ <i18n.Translate>Clear</i18n.Translate>
</button>
</span>
)}
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx b/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx
index d284b476f..b1998a457 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx
@@ -77,7 +77,9 @@ export function InputImage<T>({
readonly={readonly}
onChange={(e) => {
const f: FileList | null = e.currentTarget.files;
+ console.log("on change", e, f)
if (!f || f.length != 1) {
+
return onChange(undefined!);
}
if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {
@@ -92,7 +94,7 @@ export function InputImage<T>({
"",
),
);
- return onChange(`data:${f[0].type};base64,${b64}` as any);
+ return onChange(`data:${f[0].type};base64,${b64}` as T[keyof T]);
});
}}
/>
@@ -102,7 +104,7 @@ export function InputImage<T>({
{error && <p class="help is-danger">{error}</p>}
{sizeError && (
<p class="help is-danger">
- <i18n.Translate>Image should be smaller than 1 MB</i18n.Translate>
+ <i18n.Translate>Image must be smaller than 1 MB</i18n.Translate>
</p>
)}
{!value && (
@@ -111,7 +113,12 @@ export function InputImage<T>({
</button>
)}
{value && (
- <button class="button" onClick={() => onChange(undefined!)}>
+ <button class="button" onClick={() => {
+ if (image.current) {
+ image.current.value = ""
+ }
+ onChange(undefined!);
+ }}>
<i18n.Translate>Remove</i18n.Translate>
</button>
)}
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx b/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx
index fcecd8932..c09b642ad 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx
@@ -44,7 +44,6 @@ export function InputPayto<T>({
placeholder={placeholder}
help={help}
tooltip={tooltip}
- isValid={(v) => v && PAYTO_REGEX.test(v)}
toStr={(v?: string) => (!v ? "" : v.replace(PAYTO_START_REGEX, ""))}
fromStr={(v: string) => `payto://${v}`}
/>
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
index 585894863..3ae067062 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx
@@ -18,21 +18,24 @@
*
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { parsePaytoUri, stringifyPaytoUri } from "@gnu-taler/taler-util";
+import {
+ PaytoUri,
+ TranslatedString,
+ parsePaytoUri,
+ stringifyPaytoUri,
+} from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
import { useEffect, useState } from "preact/hooks";
import { COUNTRY_TABLE } from "../../utils/constants.js";
import { undefinedIfEmpty } from "../../utils/table.js";
-import { FormErrors, FormProvider } from "./FormProvider.js";
+import { FormErrors, FormProvider, TalerForm } from "./FormProvider.js";
import { Input } from "./Input.js";
import { InputGroup } from "./InputGroup.js";
import { InputSelector } from "./InputSelector.js";
import { InputProps, useField } from "./useField.js";
-export interface Props<T> extends InputProps<T> {
- isValid?: (e: any) => boolean;
-}
+export interface Props<T> extends InputProps<T> {}
// type Entity = PaytoUriGeneric
// https://datatracker.ietf.org/doc/html/rfc8905
@@ -51,7 +54,7 @@ type Entity = {
amount?: string;
instruction?: string;
[name: string]: string | undefined;
- };
+ } & TalerForm;
};
function isEthereumAddress(address: string) {
@@ -66,7 +69,7 @@ function isEthereumAddress(address: string) {
return checkAddressChecksum(address);
}
-function checkAddressChecksum(address: string) {
+function checkAddressChecksum(_address: string) {
//TODO implement ethereum checksum
return true;
}
@@ -74,7 +77,7 @@ function checkAddressChecksum(address: string) {
function validateBitcoin_path1(
addr: string,
i18n: ReturnType<typeof useTranslationContext>["i18n"],
-): string | undefined {
+): TranslatedString | undefined {
try {
const valid = /^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$/.test(addr);
if (valid) return undefined;
@@ -87,7 +90,7 @@ function validateBitcoin_path1(
function validateEthereum_path1(
addr: string,
i18n: ReturnType<typeof useTranslationContext>["i18n"],
-): string | undefined {
+): TranslatedString | undefined {
try {
const valid = isEthereumAddress(addr);
if (valid) return undefined;
@@ -98,19 +101,25 @@ function validateEthereum_path1(
}
/**
- * validates
+ * validates "[host]:[port]/[path]/" where:
+ * host: can be localhost, bank.com
+ * port: any number
+ * path: may include subpath
+ *
+ * for example
+ * localhost
* bank.com/
* bank.com
* bank.com/path
* bank.com/path/subpath/
*/
const DOMAIN_REGEX =
- /^[a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9-_](?:\.[a-zA-Z0-9-_]{2,})+(:[0-9]+)?(\/[a-zA-Z0-9-.]+)*\/?$/;
+ /^[a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9-_](?:\.[a-zA-Z0-9-_]{2,})*(:[0-9]+)?(\/[a-zA-Z0-9-.]+)*\/?$/;
function validateTalerBank_path1(
addr: string,
i18n: ReturnType<typeof useTranslationContext>["i18n"],
-): string | undefined {
+): TranslatedString | undefined {
try {
const valid = DOMAIN_REGEX.test(addr);
if (valid) return undefined;
@@ -137,7 +146,7 @@ function validateTalerBank_path1(
function validateIBAN_path1(
iban: string,
i18n: ReturnType<typeof useTranslationContext>["i18n"],
-): string | undefined {
+): TranslatedString | undefined {
// Check total length
if (iban.length < 4)
return i18n.str`IBAN numbers usually have more that 4 digits`;
@@ -175,24 +184,10 @@ function validateIBAN_path1(
const checksum = calculate_iban_checksum(step3);
if (checksum !== 1)
- return i18n.str`IBAN number is not valid, checksum is wrong`;
+ return i18n.str`IBAN number is invalid, checksum is wrong`;
return undefined;
}
-// const targets = ['ach', 'bic', 'iban', 'upi', 'bitcoin', 'ilp', 'void', 'x-taler-bank']
-const targets = [
- "Choose one...",
- "iban",
- "x-taler-bank",
- "bitcoin",
- "ethereum",
-];
-const noTargetValue = targets[0];
-const defaultTarget: Entity = {
- target: noTargetValue,
- params: {},
-};
-
export function InputPaytoForm<T>({
name,
readonly,
@@ -202,6 +197,20 @@ export function InputPaytoForm<T>({
const { value: initialValueStr, onChange } = useField<T>(name);
const initialPayto = parsePaytoUri(initialValueStr ?? "");
+ const { i18n } = useTranslationContext();
+
+ const targets = [
+ i18n.str`Choose one...`,
+ "iban",
+ "bitcoin",
+ "ethereum",
+ "x-taler-bank",
+ ];
+ const noTargetValue = targets[0];
+ const defaultTarget: Entity = {
+ target: noTargetValue,
+ params: {},
+ };
const paths = !initialPayto ? [] : initialPayto.targetPath.split("/");
const initialPath1 = paths.length >= 1 ? paths[0] : undefined;
@@ -234,12 +243,10 @@ export function InputPaytoForm<T>({
}
}, [initialValueStr]);
- const { i18n } = useTranslationContext();
-
- const errors: FormErrors<Entity> = {
- target: value.target === noTargetValue ? i18n.str`required` : undefined,
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ target: value.target === noTargetValue ? i18n.str`Required` : undefined,
path1: !value.path1
- ? i18n.str`required`
+ ? i18n.str`Required`
: value.target === "iban"
? validateIBAN_path1(value.path1, i18n)
: value.target === "bitcoin"
@@ -252,38 +259,36 @@ export function InputPaytoForm<T>({
path2:
value.target === "x-taler-bank"
? !value.path2
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined
: undefined,
params: undefinedIfEmpty({
"receiver-name": !value.params?.["receiver-name"]
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined,
}),
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const path1WithSlash =
value.path1 && !value.path1.endsWith("/") ? value.path1 + "/" : value.path1;
const pto =
hasErrors || !value.target
? undefined
- : {
+ : ({
targetType: value.target,
targetPath: value.path2
? `${path1WithSlash}${value.path2}`
: value.path1 ?? "",
- params: value.params ?? ({} as any),
+ params: value.params ?? {},
isKnown: false as const,
- };
+ } as PaytoUri);
const str = !pto ? undefined : stringifyPaytoUri(pto);
useEffect(() => {
- onChange(str as any);
+ onChange(str as T[keyof T]);
}, [str]);
return (
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputSearchOnList.tsx b/packages/merchant-backoffice-ui/src/components/form/InputSearchOnList.tsx
index 9956a6427..2cc4f07c5 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputSearchOnList.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputSearchOnList.tsx
@@ -103,7 +103,7 @@ export function InputSearchOnList<T extends Entity>({
<InputWithAddon<Search>
name="name"
label={label}
- tooltip={i18n.str`enter description or id`}
+ tooltip={i18n.str`Enter description or id`}
addonAfter={
<span class="icon">
<i class="mdi mdi-magnify" />
@@ -133,7 +133,7 @@ interface DropdownListProps<T extends Entity> {
withImage: boolean;
}
-function DropdownList<T extends Entity>({ name, onSelect, list, withImage }: DropdownListProps<T>) {
+export function DropdownList<T extends Entity>({ name, onSelect, list, withImage }: DropdownListProps<T>) {
const { i18n } = useTranslationContext();
if (!name) {
/* FIXME
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputSelector.tsx b/packages/merchant-backoffice-ui/src/components/form/InputSelector.tsx
index f567f7247..5a1a87236 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputSelector.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputSelector.tsx
@@ -78,14 +78,16 @@ export function InputSelector<T>({
);
})}
</select>
-
- {help}
</p>
- {required && (
- <span class="icon has-text-danger is-right" style={{height: "2.5em"}}>
- <i class="mdi mdi-alert" />
- </span>
- )}
+ <p class="help">{help}</p>
+ {required && (
+ <span
+ class="icon has-text-danger is-right"
+ style={{ height: "2.5em" }}
+ >
+ <i class="mdi mdi-alert" />
+ </span>
+ )}
{error && <p class="help is-danger">{error}</p>}
</div>
</div>
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx b/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
index 8104d1f9f..680ddcd02 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
@@ -96,7 +96,7 @@ export function InputStock<T>({
{!alreadyExist ? (
<button
class="button"
- data-tooltip={i18n.str`click here to configure the stock of the product, leave it as is and the backend will not control stock`}
+ data-tooltip={i18n.str`Click here to configure the stock of the product, leave it as is and the backend will not control stock.`}
onClick={(): void => {
valueHandler({
current: 0,
@@ -112,7 +112,7 @@ export function InputStock<T>({
) : (
<button
class="button"
- data-tooltip={i18n.str`this product has been configured without stock control`}
+ data-tooltip={i18n.str`This product has been configured without stock control`}
disabled
>
<span>
@@ -133,17 +133,11 @@ export function InputStock<T>({
const stockAddedErrors: FormErrors<typeof addedStock> = {
lost:
currentStock + addedStock.incoming < addedStock.lost
- ? i18n.str`lost cannot be greater than current and incoming (max ${currentStock + addedStock.incoming
+ ? i18n.str`Lost can't be greater than current and incoming (max ${currentStock + addedStock.incoming
})`
: undefined,
};
- // const stockUpdateDescription = stockAddedErrors.lost ? '' : (
- // !!addedStock.incoming || !!addedStock.lost ?
- // i18n.str`current stock will change from ${currentStock} to ${currentStock + addedStock.incoming - addedStock.lost}` :
- // i18n.str`current stock will stay at ${currentStock}`
- // )
-
return (
<Fragment>
<div class="card">
@@ -192,7 +186,7 @@ export function InputStock<T>({
side={
<button
class="button is-danger"
- data-tooltip={i18n.str`remove stock control for this product`}
+ data-tooltip={i18n.str`Remove stock control for this product`}
onClick={(): void => {
valueHandler(undefined as any);
}}
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx b/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
index 4392c7659..4957d7dda 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
@@ -18,57 +18,43 @@
*
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { Amounts, TalerMerchantApi } from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { h, VNode } from "preact";
import { useCallback, useState } from "preact/hooks";
-import * as yup from "yup";
-import { TaxSchema as schema } from "../../schemas/index.js";
-import { FormErrors, FormProvider } from "./FormProvider.js";
+import { undefinedIfEmpty } from "../../utils/table.js";
+import { FormProvider } from "./FormProvider.js";
import { Input } from "./Input.js";
import { InputGroup } from "./InputGroup.js";
import { InputProps, useField } from "./useField.js";
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
export interface Props<T> extends InputProps<T> {
isValid?: (e: any) => boolean;
}
type Entity = TalerMerchantApi.Tax;
-export function InputTaxes<T>({
- name,
- readonly,
- label,
-}: Props<keyof T>): VNode {
+export function InputTaxes<T>({ name, label }: Props<keyof T>): VNode {
const { value: taxes, onChange } = useField<T>(name);
+ const { i18n } = useTranslationContext();
const [value, valueHandler] = useState<Partial<Entity>>({});
- // const [errors, setErrors] = useState<FormErrors<Entity>>({})
- let errors: FormErrors<Entity> = {};
+ const errors = undefinedIfEmpty({
+ name: !value.name ? i18n.str`Required` : undefined,
+ tax: !value.tax
+ ? i18n.str`Required`
+ : Amounts.parse(value.tax) === undefined
+ ? i18n.str`Invalid`
+ : undefined,
+ });
- try {
- schema.validateSync(value, { abortEarly: false });
- } catch (err) {
- if (err instanceof yup.ValidationError) {
- const yupErrors = err.inner as yup.ValidationError[];
- errors = yupErrors.reduce(
- (prev, cur) =>
- !cur.path ? prev : { ...prev, [cur.path]: cur.message },
- {},
- );
- }
- }
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submit = useCallback((): void => {
onChange([value as any, ...taxes] as any);
valueHandler({});
}, [value]);
- const { i18n } = useTranslationContext();
-
//FIXME: translating plural singular
return (
<InputGroup
@@ -76,7 +62,11 @@ export function InputTaxes<T>({
label={label}
alternative={
taxes.length > 0 && (
- <p>This product has {taxes.length} applicable taxes configured.</p>
+ <p>
+ <i18n.Translate>
+ This product has {taxes.length} applicable taxes configured.
+ </i18n.Translate>
+ </p>
)
}
>
@@ -134,7 +124,7 @@ export function InputTaxes<T>({
<div class="buttons is-right mt-5">
<button
class="button is-info"
- data-tooltip={i18n.str`add tax to the tax list`}
+ data-tooltip={i18n.str`Add tax to the tax list`}
disabled={hasErrors}
onClick={submit}
>
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputToggle.tsx b/packages/merchant-backoffice-ui/src/components/form/InputToggle.tsx
index 89a4dc48c..80ec9ab98 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputToggle.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputToggle.tsx
@@ -70,7 +70,6 @@ export function InputToggle<T>({
<div class="field-body is-flex-grow-3">
<div class="field">
<p class={expand ? "control is-expanded" : "control"}>
- {/* {String(toBoolean(value))} */}
<label class="toggle" style={{ marginLeft: 4, marginTop: 0 }}>
<input
type="checkbox"
diff --git a/packages/merchant-backoffice-ui/src/components/form/JumpToElementById.tsx b/packages/merchant-backoffice-ui/src/components/form/JumpToElementById.tsx
index f5f9d5b4f..7a9d5feba 100644
--- a/packages/merchant-backoffice-ui/src/components/form/JumpToElementById.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/JumpToElementById.tsx
@@ -1,19 +1,42 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
import { TranslatedString } from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { h, VNode } from "preact";
import { useState } from "preact/hooks";
-export function JumpToElementById({ testIfExist, onSelect, placeholder, description }: { placeholder: TranslatedString, description: TranslatedString, testIfExist: (id: string) => Promise<boolean>, onSelect: (id: string) => void }): VNode {
- const { i18n } = useTranslationContext()
+export function JumpToElementById({
+ testIfExist,
+ onSelect,
+ placeholder,
+ description,
+}: {
+ placeholder: TranslatedString;
+ description: TranslatedString;
+ testIfExist: (id: string) => Promise<boolean>;
+ onSelect: (id: string) => void;
+}): VNode {
+ const { i18n } = useTranslationContext();
- const [error, setError] = useState<string | undefined>(
- undefined,
- );
+ const [error, setError] = useState<string | undefined>(undefined);
- const [id, setId] = useState<string>()
+ const [id, setId] = useState<string>();
async function check(currentId: string | undefined): Promise<void> {
if (!currentId) {
- setError(i18n.str`missing id`);
+ setError(i18n.str`Missing ID`);
return;
}
try {
@@ -22,42 +45,38 @@ export function JumpToElementById({ testIfExist, onSelect, placeholder, descript
onSelect(currentId);
setError(undefined);
} else {
- setError(i18n.str`not found`);
+ setError(i18n.str`Not found`);
}
} catch {
- setError(i18n.str`not found`);
+ setError(i18n.str`Not found`);
}
}
- return <div class="level">
- <div class="level-left">
- <div class="level-item">
- <div class="field has-addons">
- <div class="control">
- <input
- class={error ? "input is-danger" : "input"}
- type="text"
- value={id ?? ""}
- onChange={(e) => setId(e.currentTarget.value)}
- placeholder={placeholder}
- />
- {error && <p class="help is-danger">{error}</p>}
+ return (
+ <div class="level">
+ <div class="level-left">
+ <div class="level-item">
+ <div class="field has-addons">
+ <div class="control">
+ <input
+ class={error ? "input is-danger" : "input"}
+ type="text"
+ value={id ?? ""}
+ onChange={(e) => setId(e.currentTarget.value)}
+ placeholder={placeholder}
+ />
+ {error && <p class="help is-danger">{error}</p>}
+ </div>
+ <span class="has-tooltip-bottom" data-tooltip={description}>
+ <button class="button" onClick={() => check(id)}>
+ <span class="icon">
+ <i class="mdi mdi-arrow-right" />
+ </span>
+ </button>
+ </span>
</div>
- <span
- class="has-tooltip-bottom"
- data-tooltip={description}
- >
- <button
- class="button"
- onClick={(e) => check(id)}
- >
- <span class="icon">
- <i class="mdi mdi-arrow-right" />
- </span>
- </button>
- </span>
</div>
</div>
</div>
- </div>
+ );
}
diff --git a/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx b/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx
index a6cd8014d..07fd11638 100644
--- a/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx
+++ b/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx
@@ -32,10 +32,8 @@ type LangsNames = {
const names: LangsNames = {
es: "Español [es]",
en: "English [en]",
- fr: "Français [fr]",
de: "Deutsch [de]",
- sv: "Svenska [sv]",
- it: "Italiano [it]",
+ uk: "Українська [uk]",
};
function getLangName(s: keyof LangsNames | string) {
@@ -69,7 +67,7 @@ export function LangSelector(): VNode {
{updatingLang && (
<div class="dropdown-menu" id="dropdown-menu" role="menu">
<div class="dropdown-content">
- {Object.keys(messages)
+ {Object.keys(names)
.filter((l) => l !== lang)
.map((l) => (
<a
diff --git a/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx b/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx
index aeb49e81d..90cf22d72 100644
--- a/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx
+++ b/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx
@@ -25,6 +25,7 @@ import { Fragment, VNode, h } from "preact";
import { useSessionContext } from "../../context/session.js";
import { useInstanceKYCDetails } from "../../hooks/instance.js";
import { LangSelector } from "./LangSelector.js";
+import { usePreference } from "../../hooks/preference.js";
// const GIT_HASH = typeof __GIT_HASH__ !== "undefined" ? __GIT_HASH__ : undefined;
const VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : undefined;
@@ -37,15 +38,19 @@ export function Sidebar({ mobile }: Props): VNode {
const { i18n } = useTranslationContext();
const { state, logOut, config } = useSessionContext();
const kycStatus = useInstanceKYCDetails();
+ const [pref] = usePreference();
const needKYC =
kycStatus !== undefined &&
!(kycStatus instanceof TalerError) &&
kycStatus.type === "ok" &&
- !!kycStatus.body;
+ !!kycStatus.body &&
+ kycStatus.body.kyc_data.findIndex(
+ (d) => d.payto_kycauths !== undefined || d.access_token !== undefined,
+ ) !== -1;
const isLoggedIn = state.status === "loggedIn";
const hasToken = isLoggedIn && state.token !== undefined;
-
+
return (
<aside
class="aside is-placed-left is-expanded"
@@ -99,38 +104,57 @@ export function Sidebar({ mobile }: Props): VNode {
</a>
</li>
<li>
- <a href={"/transfers"} class="has-icon">
+ <a href={"/category"} class="has-icon">
<span class="icon">
- <i class="mdi mdi-arrow-left-right" />
+ <i class="mdi mdi-label-outline" />
</span>
<span class="menu-item-label">
- <i18n.Translate>Transfers</i18n.Translate>
+ <i18n.Translate>Categories</i18n.Translate>
</span>
</a>
</li>
<li>
- <a href={"/templates"} class="has-icon">
+ <a href={"/transfers"} class="has-icon">
<span class="icon">
- <i class="mdi mdi-qrcode" />
+ <i class="mdi mdi-arrow-left-right" />
</span>
<span class="menu-item-label">
- <i18n.Translate>Templates</i18n.Translate>
+ <i18n.Translate>Transfers</i18n.Translate>
</span>
</a>
</li>
<li>
- <a href={"/tokenfamilies"} class="has-icon">
+ <a href={"/templates"} class="has-icon">
<span class="icon">
- <i class="mdi mdi-key" />
+ <i class="mdi mdi-qrcode" />
</span>
<span class="menu-item-label">
- <i18n.Translate>Token Families</i18n.Translate>
+ <i18n.Translate>Templates</i18n.Translate>
</span>
</a>
</li>
- {needKYC && (
+ {pref.developerMode ? (
<li>
- <a href={"/kyc"} class="has-icon">
+ <a href={"/tokenfamilies"} class="has-icon">
+ <span class="icon">
+ <i class="mdi mdi-key" />
+ </span>
+ <span class="menu-item-label">
+ <i18n.Translate>Token Families</i18n.Translate>
+ </span>
+ </a>
+ </li>
+ ) : undefined}
+ {needKYC && (
+ <li class="is-warning">
+ <a
+ href={"/kyc"}
+ class="has-icon"
+ style={{
+ backgroundColor: "darkorange",
+ color: "black",
+ }}
+ >
<span class="icon">
<i class="mdi mdi-account-check" />
</span>
diff --git a/packages/merchant-backoffice-ui/src/components/menu/index.tsx b/packages/merchant-backoffice-ui/src/components/menu/index.tsx
index c13839d2d..d330246e4 100644
--- a/packages/merchant-backoffice-ui/src/components/menu/index.tsx
+++ b/packages/merchant-backoffice-ui/src/components/menu/index.tsx
@@ -44,6 +44,12 @@ function getInstanceTitle(path: string, id: string): string {
return `${id}: New product`;
case InstancePaths.inventory_update:
return `${id}: Update product`;
+ case InstancePaths.category_list:
+ return `${id}: Category`;
+ case InstancePaths.category_new:
+ return `${id}: New category`;
+ case InstancePaths.category_update:
+ return `${id}: Update category`;
case InstancePaths.transfers_list:
return `${id}: Transfers`;
case InstancePaths.transfers_new:
diff --git a/packages/merchant-backoffice-ui/src/components/modal/index.tsx b/packages/merchant-backoffice-ui/src/components/modal/index.tsx
index ba32950b5..a0c5f5044 100644
--- a/packages/merchant-backoffice-ui/src/components/modal/index.tsx
+++ b/packages/merchant-backoffice-ui/src/components/modal/index.tsx
@@ -19,21 +19,24 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { ComponentChildren, Fragment, h, VNode } from "preact";
-import { useState } from "preact/hooks";
-import { DEFAULT_REQUEST_TIMEOUT } from "../../utils/constants.js";
-import { Spinner } from "../exception/loading.js";
-import { FormErrors, FormProvider } from "../form/FormProvider.js";
-import { Input } from "../form/Input.js";
-import { useSessionContext } from "../../context/session.js";
import {
AccountLetter,
codecForAccountLetter,
PaytoString,
PaytoUri,
stringifyPaytoUri,
+ TranslatedString,
} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { ComponentChildren, Fragment, h, VNode } from "preact";
+import { useEffect, useRef, useState } from "preact/hooks";
+import { useSessionContext } from "../../context/session.js";
+import { DEFAULT_REQUEST_TIMEOUT } from "../../utils/constants.js";
+import { undefinedIfEmpty } from "../../utils/table.js";
+import { Spinner } from "../exception/loading.js";
+import { FormErrors, FormProvider } from "../form/FormProvider.js";
+import { Input } from "../form/Input.js";
+import { Amount } from "../Amount.js";
interface Props {
active?: boolean;
@@ -142,7 +145,13 @@ export function ContinueModal({
);
}
-export function SimpleModal({ onCancel, children }: any): VNode {
+export function SimpleModal({
+ onCancel,
+ children,
+}: {
+ onCancel: () => void;
+ children: ComponentChildren;
+}): VNode {
return (
<div class="modal is-active">
<div class="modal-background " onClick={onCancel} />
@@ -232,15 +241,13 @@ export function ImportingAccountModal({
parsed !== undefined ? codecForAccountLetter().decode(parsed) : undefined;
} catch (e) {
account = undefined;
- if (e instanceof Error) {
- parsingError = e.message;
- }
+ parsingError = e instanceof Error ? e.message : String(e);
}
const errors: FormErrors<{ letter: string }> = {
letter: !letter
- ? i18n.str`required`
+ ? i18n.str`Required`
: parsed === undefined
- ? i18n.str`letter should be a JSON string`
+ ? i18n.str`Letter must be a JSON string`
: account === undefined
? i18n.str`JSON string is invalid`
: undefined,
@@ -328,7 +335,7 @@ export function CompareAccountsModal({
const { i18n } = useTranslationContext();
return (
<ConfirmModal
- label={i18n.str`Update form`}
+ label={i18n.str`Correct form`}
description={i18n.str`Comparing account details`}
active
onCancel={onCancel}
@@ -415,6 +422,253 @@ export function CompareAccountsModal({
);
}
+interface ValidateBankAccountModalProps {
+ onCancel: () => void;
+ origin: PaytoUri;
+ targets: PaytoUri[];
+}
+export function ValidBankAccount({
+ onCancel,
+ origin,
+ targets,
+}: ValidateBankAccountModalProps): VNode {
+ const { i18n } = useTranslationContext();
+ const payto = targets[0];
+ const subject = payto.params["message"];
+
+ const accountPart = !payto.isKnown ? (
+ <Fragment>
+ <Row name={i18n.str`Account`} value={payto.targetPath} />
+ </Fragment>
+ ) : payto.targetType === "x-taler-bank" ? (
+ <Fragment>
+ <Row name={i18n.str`Bank host`} value={payto.host} />
+ <Row name={i18n.str`Bank account`} value={payto.account} />
+ </Fragment>
+ ) : payto.targetType === "iban" ? (
+ <Fragment>
+ {payto.bic !== undefined ? (
+ <Row name={i18n.str`BIC`} value={payto.bic} />
+ ) : undefined}
+ <Row name={i18n.str`IBAN`} value={payto.iban} />
+ </Fragment>
+ ) : undefined;
+
+ const receiver =
+ payto.params["receiver-name"] || payto.params["receiver"] || undefined;
+
+ const from = !origin.isKnown
+ ? origin.targetPath
+ : origin.targetType === "iban"
+ ? origin.iban
+ : origin.targetType === "bitcoin"
+ ? `${origin.address.substring(0, 8)}...`
+ : origin.account;
+
+ return (
+ <ConfirmModal
+ label={i18n.str`Ok`}
+ description={i18n.str`Validate bank account: ${from}`}
+ active
+ onCancel={onCancel}
+ // onConfirm={onConfirm}
+ >
+ <p style={{ paddingTop: 0 }}>
+ <i18n.Translate>
+ You need to make a bank transfer with the specified subject to
+ validate that you are the owner of the account.
+ </i18n.Translate>
+ </p>
+ <div class="table-container">
+ <table>
+ <tbody>
+ <tr>
+ <td colSpan={3}>
+ <i18n.Translate>Step 1:</i18n.Translate>
+ &nbsp;
+ <i18n.Translate>
+ Copy this string and paste it into the field 'Subject' (resp.
+ 'Purpose') in your banking app or bank website
+ </i18n.Translate>
+ </td>
+ </tr>
+ <Row name={i18n.str`Subject`} value={subject} literal />
+
+ <tr>
+ <td colSpan={3}>
+ <i18n.Translate>Step 2:</i18n.Translate>
+ &nbsp;
+ <i18n.Translate>
+ Copy and paste this IBAN and the name into the receiver fields
+ in your banking app or website
+ </i18n.Translate>
+ </td>
+ </tr>
+ {accountPart}
+ {receiver ? (
+ <Row name={i18n.str`Receiver name`} value={receiver} />
+ ) : undefined}
+
+ <tr>
+ <td colSpan={3}>
+ <i18n.Translate>Step 3:</i18n.Translate>
+ &nbsp;
+ <i18n.Translate>
+ Select the smallest possible amount for the wire transfer in
+ your banking app or on your online banking website.
+ </i18n.Translate>
+ </td>
+ </tr>
+ {/* <Row
+ name={i18n.str`Amount`}
+ value={
+ <Amount
+ value={payto.params["amount"] as AmountString}
+ hideCurrency
+ />
+ }
+ /> */}
+
+ <tr>
+ <td colSpan={3}>
+ {/* <WarningBox style={{ margin: 0 }}> */}
+ <b>
+ <i18n.Translate>
+ Make sure ALL data is correct, including the subject and you
+ are using your selected bank account. You can use the copy
+ buttons (<CopyIcon />) to prevent typing errors or the
+ "payto://" URI below to copy just one value.
+ </i18n.Translate>
+ </b>
+ {/* </WarningBox> */}
+ </td>
+ </tr>
+
+ <tr>
+ <td colSpan={2} width="100%" style={{ wordBreak: "break-all" }}>
+ <i18n.Translate>
+ Alternatively, if your bank already supports the standard
+ 'PayTo URI', you can use this{" "}
+ <a
+ target="_bank"
+ rel="noreferrer"
+ title="RFC 8905 for designating targets for payments"
+ href="https://tools.ietf.org/html/rfc8905"
+ >
+ PayTo URI
+ </a>{" "}
+ link instead
+ </i18n.Translate>
+ </td>
+ <td>
+ <CopyButton getContent={() => stringifyPaytoUri(payto)} />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </ConfirmModal>
+ );
+}
+
+function Row({
+ name,
+ value,
+ literal,
+}: {
+ name: TranslatedString;
+ value: string | VNode;
+ literal?: boolean;
+}): VNode {
+ const preRef = useRef<HTMLPreElement>(null);
+ const tdRef = useRef<HTMLTableCellElement>(null);
+
+ function getContent(): string {
+ return preRef.current?.textContent || tdRef.current?.textContent || "";
+ }
+
+ return (
+ <tr>
+ <td style={{ padding: 4, width: "1%", whiteSpace: "nowrap" }}>
+ <b>{name}</b>
+ </td>
+ {literal ? (
+ <td style={{ padding: 4 }}>
+ <pre
+ ref={preRef}
+ style={{
+ whiteSpace: "pre-wrap",
+ wordBreak: "break-word",
+ padding: 4,
+ }}
+ >
+ {value}
+ </pre>
+ </td>
+ ) : (
+ <td ref={tdRef} style={{ padding: 4 }}>
+ {value}
+ </td>
+ )}
+ <td style={{ padding: 4 }}>
+ <CopyButton getContent={getContent} />
+ </td>
+ </tr>
+ );
+}
+
+function CopyButton({ getContent }: { getContent: () => string }): VNode {
+ const [copied, setCopied] = useState(false);
+ function copyText(): void {
+ navigator.clipboard.writeText(getContent() || "");
+ setCopied(true);
+ }
+ useEffect(() => {
+ if (copied) {
+ setTimeout(() => {
+ setCopied(false);
+ }, 1000);
+ }
+ }, [copied]);
+
+ if (!copied) {
+ return (
+ <button onClick={copyText}>
+ <CopyIcon />
+ </button>
+ );
+ }
+ return (
+ // <TooltipLeft content="Copied">
+ <button disabled>
+ <CopiedIcon />
+ </button>
+ // </TooltipLeft>
+ );
+}
+
+export const CopyIcon = (): VNode => (
+ <svg height="16" viewBox="0 0 16 16" width="16">
+ <path
+ fill-rule="evenodd"
+ d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"
+ />
+ <path
+ fill-rule="evenodd"
+ d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"
+ />
+ </svg>
+);
+
+export const CopiedIcon = (): VNode => (
+ <svg height="16" viewBox="0 0 16 16" width="16">
+ <path
+ fill-rule="evenodd"
+ d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"
+ />
+ </svg>
+);
+
interface DeleteModalProps {
element: { id: string; name: string };
onCancel: () => void;
@@ -426,6 +680,7 @@ export function DeleteModal({
onCancel,
onConfirm,
}: DeleteModalProps): VNode {
+ const { i18n } = useTranslationContext();
return (
<ConfirmModal
label={`Delete instance`}
@@ -436,17 +691,27 @@ export function DeleteModal({
onConfirm={() => onConfirm(element.id)}
>
<p>
- If you delete the instance named <b>&quot;{element.name}&quot;</b> (ID:{" "}
- <b>{element.id}</b>), the merchant will no longer be able to process
- orders or refunds
+ <i18n.Translate>
+ If you delete the instance named <b>&quot;{element.name}&quot;</b>{" "}
+ (ID: <b>{element.id}</b>), the merchant will no longer be able to
+ process orders or refunds
+ </i18n.Translate>
</p>
<p>
- This action deletes the instance private key, but preserves all
- transaction data. You can still access that data after deleting the
- instance.
+ <i18n.Translate>
+ This action deletes the instance private key, but preserves all
+ transaction data. You can still access that data after deleting the
+ instance.
+ </i18n.Translate>
</p>
<p class="warning">
- Deleting an instance <b>cannot be undone</b>.
+ <i18n.Translate>
+ Deleting an instance{" "}
+ <b>
+ <i18n.Translate>Can't be undone</i18n.Translate>
+ </b>
+ .
+ </i18n.Translate>
</p>
</ConfirmModal>
);
@@ -457,6 +722,7 @@ export function PurgeModal({
onCancel,
onConfirm,
}: DeleteModalProps): VNode {
+ const { i18n } = useTranslationContext();
return (
<ConfirmModal
label={`Purge the instance`}
@@ -467,16 +733,26 @@ export function PurgeModal({
onConfirm={() => onConfirm(element.id)}
>
<p>
- If you purge the instance named <b>&quot;{element.name}&quot;</b> (ID:{" "}
- <b>{element.id}</b>), you will also delete all it&apos;s transaction
- data.
+ <i18n.Translate>
+ If you purge the instance named <b>&quot;{element.name}&quot;</b> (ID:{" "}
+ <b>{element.id}</b>), you will also delete all it&apos;s transaction
+ data.
+ </i18n.Translate>
</p>
<p>
- The instance will disappear from your list, and you will no longer be
- able to access it&apos;s data.
+ <i18n.Translate>
+ The instance will disappear from your list, and you will no longer be
+ able to access it&apos;s data.
+ </i18n.Translate>
</p>
<p class="warning">
- Purging an instance <b>cannot be undone</b>.
+ <i18n.Translate>
+ Purging an instance{" "}
+ <b>
+ <i18n.Translate>Can't be undone</i18n.Translate>
+ </b>
+ .
+ </i18n.Translate>
</p>
</ConfirmModal>
);
@@ -505,28 +781,26 @@ export function UpdateTokenModal({
const { i18n } = useTranslationContext();
const hasInputTheCorrectOldToken = oldToken && oldToken !== form.old_token;
- const errors = {
+ const errors = undefinedIfEmpty({
old_token: hasInputTheCorrectOldToken
- ? i18n.str`is not the same as the current access token`
+ ? i18n.str`Is not the same as the current access token`
: undefined,
new_token: !form.new_token
- ? i18n.str`cannot be empty`
+ ? i18n.str`Required`
: form.new_token === form.old_token
- ? i18n.str`cannot be the same as the old token`
+ ? i18n.str`Can't be the same as the old token`
: undefined,
repeat_token:
form.new_token !== form.repeat_token
- ? i18n.str`is not the same`
+ ? i18n.str`Is not the same`
: undefined,
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const { state } = useSessionContext();
- const text = i18n.str`You are updating the access token from instance with id ${state.instance}`;
+ const text = i18n.str`You are updating the access token for the instance with ID ${state.instance}`;
return (
<ClearConfirmModal
@@ -543,20 +817,20 @@ export function UpdateTokenModal({
<Input<State>
name="old_token"
label={i18n.str`Old access token`}
- tooltip={i18n.str`access token currently in use`}
+ tooltip={i18n.str`Access token currently in use`}
inputType="password"
/>
)}
<Input<State>
name="new_token"
label={i18n.str`New access token`}
- tooltip={i18n.str`next access token to be used`}
+ tooltip={i18n.str`Next access token to be used`}
inputType="password"
/>
<Input<State>
name="repeat_token"
label={i18n.str`Repeat access token`}
- tooltip={i18n.str`confirm the same access token`}
+ tooltip={i18n.str`Confirm the same access token`}
inputType="password"
/>
</FormProvider>
@@ -584,21 +858,19 @@ export function SetTokenNewInstanceModal({
});
const { i18n } = useTranslationContext();
- const errors = {
+ const errors = undefinedIfEmpty({
new_token: !form.new_token
- ? i18n.str`cannot be empty`
+ ? i18n.str`Required`
: form.new_token === form.old_token
- ? i18n.str`cannot be the same as the old access token`
+ ? i18n.str`Can't be the same as the old access token`
: undefined,
repeat_token:
form.new_token !== form.repeat_token
- ? i18n.str`is not the same`
+ ? i18n.str`Is not the same`
: undefined,
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
return (
<div class="modal is-active">
@@ -620,13 +892,13 @@ export function SetTokenNewInstanceModal({
<Input<State>
name="new_token"
label={i18n.str`New access token`}
- tooltip={i18n.str`next access token to be used`}
+ tooltip={i18n.str`Next access token to be used`}
inputType="password"
/>
<Input<State>
name="repeat_token"
label={i18n.str`Repeat access token`}
- tooltip={i18n.str`confirm the same access token`}
+ tooltip={i18n.str`Confirm the same access token`}
inputType="password"
/>
</FormProvider>
diff --git a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
index 3d15918dc..ca7ee3278 100644
--- a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
@@ -110,7 +110,7 @@ export function InventoryProductForm({
<InputNumber<Form>
name="quantity"
label={i18n.str`Quantity`}
- tooltip={i18n.str`how many products will be added`}
+ tooltip={i18n.str`How many products will be added`}
/>
)}
</div>
diff --git a/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx b/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
index a127999fc..4fd6e62ad 100644
--- a/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
@@ -13,13 +13,12 @@
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
+import { AmountString, Amounts, TalerMerchantApi } from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
import { useCallback, useEffect, useState } from "preact/hooks";
-import * as yup from "yup";
import { useListener } from "../../hooks/listener.js";
-import { NonInventoryProductSchema as schema } from "../../schemas/index.js";
+import { undefinedIfEmpty } from "../../utils/table.js";
import { FormErrors, FormProvider } from "../form/FormProvider.js";
import { Input } from "../form/Input.js";
import { InputCurrency } from "../form/InputCurrency.js";
@@ -69,7 +68,7 @@ export function NonInventoryProductFrom({
<div class="buttons">
<button
class="button is-success"
- data-tooltip={i18n.str`describe and add a product that is not in the inventory list`}
+ data-tooltip={i18n.str`Describe and add a product that is not in the inventory list`}
onClick={() => setShowCreateProduct(true)}
>
<i18n.Translate>Add custom product</i18n.Translate>
@@ -140,38 +139,39 @@ interface NonInventoryProduct {
}
export function ProductForm({ onSubscribe, initial }: ProductProps): VNode {
+ const { i18n } = useTranslationContext();
const [value, valueHandler] = useState<Partial<NonInventoryProduct>>({
taxes: [],
...initial,
});
- let errors: FormErrors<NonInventoryProduct> = {};
- try {
- schema.validateSync(value, { abortEarly: false });
- } catch (err) {
- if (err instanceof yup.ValidationError) {
- const yupErrors = err.inner as yup.ValidationError[];
- errors = yupErrors.reduce(
- (prev, cur) =>
- !cur.path ? prev : { ...prev, [cur.path]: cur.message },
- {},
- );
- }
- }
+ const errors = undefinedIfEmpty<FormErrors<NonInventoryProduct>>({
+ quantity:
+ value.quantity === undefined
+ ? i18n.str`Required`
+ : typeof value.quantity !== "number"
+ ? i18n.str`Must be a number`
+ : value.quantity < 1
+ ? i18n.str`Must be grater than 0`
+ : undefined,
+ description: !value.description ? i18n.str`Required` : undefined,
+ unit: !value.description ? i18n.str`Required` : undefined,
+ price: !value.price
+ ? i18n.str`Required`
+ : Amounts.parse(value.price) === undefined
+ ? i18n.str`Invalid`
+ : undefined,
+ });
const submit = useCallback((): Entity | undefined => {
return value as TalerMerchantApi.Product;
}, [value]);
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
useEffect(() => {
onSubscribe(hasErrors ? undefined : submit);
}, [submit, hasErrors]);
- const { i18n } = useTranslationContext();
-
return (
<div>
<FormProvider<NonInventoryProduct>
@@ -183,29 +183,29 @@ export function ProductForm({ onSubscribe, initial }: ProductProps): VNode {
<InputImage<NonInventoryProduct>
name="image"
label={i18n.str`Image`}
- tooltip={i18n.str`photo of the product`}
+ tooltip={i18n.str`Photo of the product.`}
/>
<Input<NonInventoryProduct>
name="description"
inputType="multiline"
label={i18n.str`Description`}
- tooltip={i18n.str`full product description`}
+ tooltip={i18n.str`Full product description.`}
/>
<Input<NonInventoryProduct>
name="unit"
label={i18n.str`Unit`}
- tooltip={i18n.str`name of the product unit`}
+ tooltip={i18n.str`Name of the product unit.`}
/>
<InputCurrency<NonInventoryProduct>
name="price"
label={i18n.str`Price`}
- tooltip={i18n.str`amount in the current currency`}
+ tooltip={i18n.str`Amount in the current currency.`}
/>
<InputNumber<NonInventoryProduct>
name="quantity"
label={i18n.str`Quantity`}
- tooltip={i18n.str`how many products will be added`}
+ tooltip={i18n.str`How many products will be added.`}
/>
<InputTaxes<NonInventoryProduct> name="taxes" label={i18n.str`Taxes`} />
diff --git a/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx b/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
index dede0008f..03afd3222 100644
--- a/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
@@ -19,17 +19,18 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util";
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import {
+ AmountString,
+ Amounts,
+ TalerError,
+ TalerMerchantApi,
+} from "@gnu-taler/taler-util";
+import { Loading, useTranslationContext } from "@gnu-taler/web-util/browser";
import { h } from "preact";
import { useCallback, useEffect, useState } from "preact/hooks";
-import * as yup from "yup";
import { useSessionContext } from "../../context/session.js";
-import {
- ProductCreateSchema as createSchema,
- ProductUpdateSchema as updateSchema,
-} from "../../schemas/index.js";
-import { FormErrors, FormProvider } from "../form/FormProvider.js";
+import { undefinedIfEmpty } from "../../utils/table.js";
+import { FormProvider } from "../form/FormProvider.js";
import { Input } from "../form/Input.js";
import { InputCurrency } from "../form/InputCurrency.js";
import { InputImage } from "../form/InputImage.js";
@@ -37,8 +38,13 @@ import { InputNumber } from "../form/InputNumber.js";
import { InputStock, Stock } from "../form/InputStock.js";
import { InputTaxes } from "../form/InputTaxes.js";
import { InputWithAddon } from "../form/InputWithAddon.js";
+import { InputArray } from "../form/InputArray.js";
+import { useInstanceCategories } from "../../hooks/category.js";
+import { ErrorLoadingMerchant } from "../ErrorLoadingMerchant.js";
-type Entity = TalerMerchantApi.ProductDetail & { product_id: string };
+type Entity = TalerMerchantApi.ProductDetail & {
+ product_id: string;
+};
interface Props {
onSubscribe: (c?: () => Entity | undefined) => void;
@@ -47,13 +53,33 @@ interface Props {
}
export function ProductForm({ onSubscribe, initial, alreadyExist }: Props) {
- const [value, valueHandler] = useState<Partial<Entity & { stock: Stock }>>({
+ const { i18n } = useTranslationContext();
+ const { state, lib } = useSessionContext();
+ // FIXME: if the category list is big the will bring a lot of info
+ // we could find a lazy way to add up on searches
+ const categoriesResult = useInstanceCategories();
+ if (!categoriesResult) return <Loading />;
+ if (categoriesResult instanceof TalerError) {
+ return <ErrorLoadingMerchant error={categoriesResult} />;
+ }
+ const categories =
+ categoriesResult.type === "fail" ? [] : categoriesResult.body.categories;
+ const [value, valueHandler] = useState<
+ Partial<
+ Entity & {
+ stock: Stock;
+ categories_map: { id: string; description: string }[];
+ }
+ >
+ >({
address: {},
description_i18n: {},
taxes: [],
+ categories: [],
next_restock: { t_s: "never" },
price: ":0" as AmountString,
...initial,
+ minimum_age: !initial?.minimum_age ? undefined : initial?.minimum_age,
stock:
!initial || initial.total_stock === -1
? undefined
@@ -65,25 +91,48 @@ export function ProductForm({ onSubscribe, initial, alreadyExist }: Props) {
nextRestock: initial.next_restock,
},
});
- let errors: FormErrors<Entity> = {};
- try {
- (alreadyExist ? updateSchema : createSchema).validateSync(value, {
- abortEarly: false,
+ useEffect(() => {
+ if (!initial || !initial?.categories) return;
+
+ const ps = initial.categories.map((catId) => {
+ return lib.instance
+ .getCategoryDetails(state.token, String(catId))
+ .then((res) => {
+ return res.type === "fail"
+ ? undefined
+ : { id: String(catId), description: res.body.name };
+ });
});
- } catch (err) {
- if (err instanceof yup.ValidationError) {
- const yupErrors = err.inner as yup.ValidationError[];
- errors = yupErrors.reduce(
- (prev, cur) =>
- !cur.path ? prev : { ...prev, [cur.path]: cur.message },
- {},
- );
- }
+ Promise.all(ps).then((all) => {
+ const categories_map = all.filter(notEmpty);
+ valueHandler({ ...value, categories_map });
+ });
+ }, []);
+
+ const errors = undefinedIfEmpty({
+ product_id: !value.product_id ? i18n.str`Required` : undefined,
+ description: !value.description ? i18n.str`Required` : undefined,
+ unit: !value.unit ? i18n.str`Required` : undefined,
+ price: !value.price
+ ? i18n.str`Required`
+ : Amounts.parse(value.price) === undefined
+ ? i18n.str`Invalid amount`
+ : undefined,
+ minimum_age:
+ value.minimum_age === undefined
+ ? undefined
+ : value.minimum_age < 1
+ ? i18n.str`Must be greater than 0`
+ : undefined,
+ });
+
+ if (alreadyExist && errors) {
+ // on update, we remove some validations
+ delete errors.product_id;
}
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as Record<string, unknown>)[k] !== undefined,
- );
+
+ const hasErrors = errors !== undefined;
const submit = useCallback((): Entity | undefined => {
const stock = value.stock;
@@ -100,6 +149,8 @@ export function ProductForm({ onSubscribe, initial, alreadyExist }: Props) {
value.address = stock.address;
}
delete value.stock;
+ value.categories = value.categories_map?.map((d) => parseInt(d.id, 10));
+ delete value.categories_map;
if (typeof value.minimum_age !== "undefined" && value.minimum_age < 1) {
delete value.minimum_age;
@@ -114,8 +165,6 @@ export function ProductForm({ onSubscribe, initial, alreadyExist }: Props) {
onSubscribe(hasErrors ? undefined : submit);
}, [submit, hasErrors]);
- const { i18n } = useTranslationContext();
- const { state } = useSessionContext();
return (
<div>
<FormProvider<Entity>
@@ -124,54 +173,80 @@ export function ProductForm({ onSubscribe, initial, alreadyExist }: Props) {
object={value}
valueHandler={valueHandler}
>
+ {/**
+ * If the user press enter on any text field it will the browser will trigger
+ * the first button that it found.
+ *
+ * In this form the InputImage will be triggered and this is unwanted.
+ *
+ * As a workaround we have this non-action button which will prevent loading/unloading
+ * the image when the enter key is pressed accidentally.
+ */}
+ <button />
{alreadyExist ? undefined : (
<InputWithAddon<Entity>
name="product_id"
addonBefore={new URL("product/", state.backendUrl.href).href}
label={i18n.str`ID`}
- tooltip={i18n.str`product identification to use in URLs (for internal use only)`}
+ tooltip={i18n.str`Product identification to use in URLs (for internal use only).`}
/>
)}
<InputImage<Entity>
name="image"
label={i18n.str`Image`}
- tooltip={i18n.str`illustration of the product for customers`}
+ tooltip={i18n.str`Illustration of the product for customers.`}
/>
<Input<Entity>
name="description"
inputType="multiline"
label={i18n.str`Description`}
- tooltip={i18n.str`product description for customers`}
+ tooltip={i18n.str`Product description for customers.`}
/>
<InputNumber<Entity>
name="minimum_age"
label={i18n.str`Age restriction`}
- tooltip={i18n.str`is this product restricted for customer below certain age?`}
- help={i18n.str`minimum age of the customer`}
+ tooltip={i18n.str`Is this product restricted for customer below certain age?`}
+ help={i18n.str`Minimum age of the customer`}
/>
<Input<Entity>
name="unit"
label={i18n.str`Unit name`}
- tooltip={i18n.str`unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers`}
- help={i18n.str`example: kg, items or liters`}
+ tooltip={i18n.str`Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.`}
+ help={i18n.str`Example: kg, items or liters`}
/>
<InputCurrency<Entity>
name="price"
label={i18n.str`Price per unit`}
- tooltip={i18n.str`sale price for customers, including taxes, for above units of the product`}
+ tooltip={i18n.str`Sale price for customers, including taxes, for above units of the product.`}
/>
<InputStock
name="stock"
label={i18n.str`Stock`}
alreadyExist={alreadyExist}
- tooltip={i18n.str`inventory for products with finite supply (for internal use only)`}
+ tooltip={i18n.str`Inventory for products with finite supply (for internal use only).`}
/>
<InputTaxes<Entity>
name="taxes"
label={i18n.str`Taxes`}
- tooltip={i18n.str`taxes included in the product price, exposed to customers`}
+ tooltip={i18n.str`Taxes included in the product price, exposed to customers.`}
+ />
+ <InputArray
+ name="categories_map"
+ label={i18n.str`Categories`}
+ getSuggestion={async () => {
+ return categories.map((cat) => {
+ return { description: cat.name, id: String(cat.category_id) };
+ });
+ }}
+ help={i18n.str`Search by category description or id`}
+ tooltip={i18n.str`Categories where this product will be listed on.`}
+ unique
/>
</FormProvider>
</div>
);
}
+
+function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {
+ return value !== null && value !== undefined;
+}
diff --git a/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx b/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
index 4fff66fd7..401013782 100644
--- a/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
@@ -34,19 +34,19 @@ export function ProductList({ list, actions = [] }: Props): VNode {
<thead>
<tr>
<th>
- <i18n.Translate>image</i18n.Translate>
+ <i18n.Translate>Image</i18n.Translate>
</th>
<th>
- <i18n.Translate>description</i18n.Translate>
+ <i18n.Translate>Description</i18n.Translate>
</th>
<th>
- <i18n.Translate>quantity</i18n.Translate>
+ <i18n.Translate>Quantity</i18n.Translate>
</th>
<th>
- <i18n.Translate>unit price</i18n.Translate>
+ <i18n.Translate>Unit price</i18n.Translate>
</th>
<th>
- <i18n.Translate>total price</i18n.Translate>
+ <i18n.Translate>Total price</i18n.Translate>
</th>
<th />
</tr>
diff --git a/packages/merchant-backoffice-ui/src/components/tokenfamily/TokenFamilyForm.tsx b/packages/merchant-backoffice-ui/src/components/tokenfamily/TokenFamilyForm.tsx
index b4c49502d..a85912efa 100644
--- a/packages/merchant-backoffice-ui/src/components/tokenfamily/TokenFamilyForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/tokenfamily/TokenFamilyForm.tsx
@@ -19,19 +19,21 @@
* @author Christian Blättler
*/
+import {
+ AbsoluteTime,
+ Duration,
+ TalerMerchantApi
+} from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { h } from "preact";
import { useCallback, useEffect, useState } from "preact/hooks";
-import * as yup from "yup";
-import { TokenFamilyCreateSchema } from "../../schemas/index.js";
+import { useSessionContext } from "../../context/session.js";
import { FormErrors, FormProvider } from "../form/FormProvider.js";
import { Input } from "../form/Input.js";
-import { InputWithAddon } from "../form/InputWithAddon.js";
import { InputDate } from "../form/InputDate.js";
import { InputDuration } from "../form/InputDuration.js";
import { InputSelector } from "../form/InputSelector.js";
-import { useSessionContext } from "../../context/session.js";
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
+import { InputWithAddon } from "../form/InputWithAddon.js";
type Entity = TalerMerchantApi.TokenFamilyCreateRequest;
@@ -43,31 +45,28 @@ interface Props {
export function TokenFamilyForm({ onSubscribe }: Props) {
const [value, valueHandler] = useState<Partial<Entity>>({
- slug: "",
- name: "",
- description: "",
+ slug: undefined,
+ name: undefined,
+ description: undefined,
description_i18n: {},
kind: TalerMerchantApi.TokenFamilyKind.Discount,
- duration: { d_us: "forever" },
- valid_after: { t_s: "never" },
- valid_before: { t_s: "never" },
+ duration: Duration.toTalerProtocolDuration(Duration.getForever()),
+ valid_after: AbsoluteTime.toProtocolTimestamp(AbsoluteTime.never()),
+ valid_before: AbsoluteTime.toProtocolTimestamp(AbsoluteTime.never()),
});
- let errors: FormErrors<Entity> = {};
- try {
- TokenFamilyCreateSchema.validateSync(value, {
- abortEarly: false,
- });
- } catch (err) {
- if (err instanceof yup.ValidationError) {
- const yupErrors = err.inner as yup.ValidationError[];
- errors = yupErrors.reduce(
- (prev, cur) =>
- !cur.path ? prev : { ...prev, [cur.path]: cur.message },
- {},
- );
- }
- }
+ const { i18n } = useTranslationContext();
+
+ const errors: FormErrors<Entity> = {
+ slug: !value.slug ? i18n.str`Required` : undefined,
+ name: !value.name ? i18n.str`Required` : undefined,
+ description: !value.description ? i18n.str`Required` : undefined,
+ valid_after: !value.valid_after ? undefined : undefined,
+ valid_before: !value.valid_before ? i18n.str`Required` : undefined,
+ duration: !value.duration ? i18n.str`Required` : undefined,
+ kind: !value.kind ? i18n.str`Required` : undefined,
+ };
+
const hasErrors = Object.keys(errors).some(
(k) => (errors as any)[k] !== undefined,
);
@@ -82,7 +81,6 @@ export function TokenFamilyForm({ onSubscribe }: Props) {
}, [submit, hasErrors]);
const { state } = useSessionContext();
- const { i18n } = useTranslationContext();
return (
<div>
@@ -96,42 +94,42 @@ export function TokenFamilyForm({ onSubscribe }: Props) {
name="slug"
addonBefore={new URL("tokenfamily/", state.backendUrl.href).href}
label={i18n.str`Slug`}
- tooltip={i18n.str`token family slug to use in URLs (for internal use only)`}
+ tooltip={i18n.str`Token family slug to use in URLs (for internal use only)`}
/>
<InputSelector<Entity>
name="kind"
label={i18n.str`Kind`}
- tooltip={i18n.str`token family kind`}
+ tooltip={i18n.str`Token family kind`}
values={["discount", "subscription"]}
/>
<Input<Entity>
name="name"
inputType="text"
label={i18n.str`Name`}
- tooltip={i18n.str`user-readable token family name`}
+ tooltip={i18n.str`User-readable token family name`}
/>
<Input<Entity>
name="description"
inputType="multiline"
label={i18n.str`Description`}
- tooltip={i18n.str`token family description for customers`}
+ tooltip={i18n.str`Token family description for customers`}
/>
<InputDate<Entity>
name="valid_after"
label={i18n.str`Valid After`}
- tooltip={i18n.str`token family can issue tokens after this date`}
+ tooltip={i18n.str`Token family can issue tokens after this date`}
withTimestampSupport
/>
<InputDate<Entity>
name="valid_before"
label={i18n.str`Valid Before`}
- tooltip={i18n.str`token family can issue tokens until this date`}
+ tooltip={i18n.str`Token family can issue tokens until this date`}
withTimestampSupport
/>
<InputDuration<Entity>
name="duration"
label={i18n.str`Duration`}
- tooltip={i18n.str`validity duration of a issued token`}
+ tooltip={i18n.str`Validity duration of a issued token`}
withForever
/>
</FormProvider>
diff --git a/packages/merchant-backoffice-ui/src/context/session.ts b/packages/merchant-backoffice-ui/src/context/session.ts
index fa5e14ab3..af7900645 100644
--- a/packages/merchant-backoffice-ui/src/context/session.ts
+++ b/packages/merchant-backoffice-ui/src/context/session.ts
@@ -18,6 +18,7 @@ import {
AccessToken,
Codec,
TalerMerchantApi,
+ TalerMerchantConfigResponse,
buildCodecForObject,
codecForString,
codecForURL,
@@ -99,7 +100,7 @@ export const defaultState = (url: URL): SavedSession => {
export interface SessionStateHandler {
lib: MerchantLib;
- config: TalerMerchantApi.VersionResponse;
+ config: TalerMerchantConfigResponse;
state: SessionState;
/**
@@ -122,11 +123,6 @@ export interface SessionStateHandler {
impersonate(baseUrl: URL): void;
}
-const SESSION_STATE_KEY = buildStorageKey(
- "merchant-session",
- codecForSessionState(),
-);
-
export const DEFAULT_ADMIN_USERNAME = "default";
export const INSTANCE_ID_LOOKUP = /\/instances\/([^/]*)\/?$/;
@@ -144,9 +140,9 @@ export const useSessionContext = (): SessionStateHandler => useContext(Context);
* Infer the instance name based on the URL.
* Create the instance of the merchant api http rest.
* Returns API that handle impersonation.
- *
- * @param param0
- * @returns
+ *
+ * @param param0
+ * @returns
*/
export const SessionContextProvider = ({
children,
@@ -162,8 +158,13 @@ export const SessionContextProvider = ({
} = useMerchantApiContext();
const [status, setStatus] = useState<"loggedIn" | "loggedOut">("loggedIn");
const [currentConfig, setCurrentConfig] =
- useState<TalerMerchantApi.VersionResponse>();
- const { value: state, update } = useLocalStorage(
+ useState<TalerMerchantConfigResponse>();
+ const SESSION_STATE_KEY = buildStorageKey(
+ `merchant-session-${merchantUrl.pathname}`,
+ codecForSessionState(),
+ );
+
+ const { value: state, update } = useLocalStorage(
SESSION_STATE_KEY,
defaultState(merchantUrl),
);
@@ -171,7 +172,7 @@ export const SessionContextProvider = ({
const currentInstance = inferInstanceName(state.backendUrl);
let lib: MerchantLib;
- let config: TalerMerchantApi.VersionResponse;
+ let config: TalerMerchantConfigResponse;
const doingImpersonation = state.backendUrl.href !== merchantUrl.href;
if (doingImpersonation) {
/**
diff --git a/packages/merchant-backoffice-ui/src/declaration.d.ts b/packages/merchant-backoffice-ui/src/declaration.d.ts
index 6f6e23b42..dfcda220b 100644
--- a/packages/merchant-backoffice-ui/src/declaration.d.ts
+++ b/packages/merchant-backoffice-ui/src/declaration.d.ts
@@ -19,7 +19,7 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-interface WithId {
+export interface WithId {
id: string;
}
@@ -94,1635 +94,3 @@ declare const __ac_token: unique symbol;
type AccessToken = string & {
[__ac_token]: true;
};
-
-export namespace ExchangeBackend {
- interface WireResponse {
- // Master public key of the exchange, must match the key returned in /keys.
- master_public_key: EddsaPublicKey;
-
- // Array of wire accounts operated by the exchange for
- // incoming wire transfers.
- accounts: WireAccount[];
-
- // Object mapping names of wire methods (i.e. "sepa" or "x-taler-bank")
- // to wire fees.
- fees: { method: AggregateTransferFee };
- }
- interface AggregateTransferFee {
- // Per transfer wire transfer fee.
- wire_fee: Amount;
-
- // Per transfer closing fee.
- closing_fee: Amount;
-
- // What date (inclusive) does this fee go into effect?
- // The different fees must cover the full time period in which
- // any of the denomination keys are valid without overlap.
- start_date: Timestamp;
-
- // What date (exclusive) does this fee stop going into effect?
- // The different fees must cover the full time period in which
- // any of the denomination keys are valid without overlap.
- end_date: Timestamp;
-
- // Signature of TALER_MasterWireFeePS with
- // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.
- sig: EddsaSignature;
- }
-}
-export namespace MerchantBackend {
- interface ErrorDetail {
- // Numeric error code unique to the condition.
- // The other arguments are specific to the error value reported here.
- code: number;
-
- // Human-readable description of the error, i.e. "missing parameter", "commitment violation", ...
- // Should give a human-readable hint about the error's nature. Optional, may change without notice!
- hint?: string;
-
- // Optional detail about the specific input value that failed. May change without notice!
- detail?: string;
-
- // Name of the parameter that was bogus (if applicable).
- parameter?: string;
-
- // Path to the argument that was bogus (if applicable).
- path?: string;
-
- // Offset of the argument that was bogus (if applicable).
- offset?: string;
-
- // Index of the argument that was bogus (if applicable).
- index?: string;
-
- // Name of the object that was bogus (if applicable).
- object?: string;
-
- // Name of the currency than was problematic (if applicable).
- currency?: string;
-
- // Expected type (if applicable).
- type_expected?: string;
-
- // Type that was provided instead (if applicable).
- type_actual?: string;
- }
-
- // Delivery location, loosely modeled as a subset of
- // ISO20022's PostalAddress25.
- interface Tax {
- // the name of the tax
- name: string;
-
- // amount paid in tax
- tax: Amount;
- }
-
- interface Auditor {
- // official name
- name: string;
-
- // Auditor's public key
- auditor_pub: EddsaPublicKey;
-
- // Base URL of the auditor
- url: string;
- }
- interface Exchange {
- // the exchange's base URL
- url: string;
-
- // master public key of the exchange
- master_pub: EddsaPublicKey;
- }
-
- interface Product {
- // merchant-internal identifier for the product.
- product_id?: string;
-
- // Human-readable product description.
- description: string;
-
- // Map from IETF BCP 47 language tags to localized descriptions
- description_i18n?: { [lang_tag: string]: string };
-
- // The number of units of the product to deliver to the customer.
- quantity: Integer;
-
- // The unit in which the product is measured (liters, kilograms, packages, etc.)
- unit: string;
-
- // The price of the product; this is the total price for quantity times unit of this product.
- price?: Amount;
-
- // An optional base64-encoded product image
- image: ImageDataUrl;
-
- // a list of taxes paid by the merchant for this product. Can be empty.
- taxes: Tax[];
-
- // time indicating when this product should be delivered
- delivery_date?: TalerProtocolTimestamp;
-
- // Minimum age buyer must have (in years). Default is 0.
- minimum_age?: Integer;
- }
- interface Merchant {
- // label for a location with the business address of the merchant
- address: Location;
-
- // the merchant's legal name of business
- name: string;
-
- // label for a location that denotes the jurisdiction for disputes.
- // Some of the typical fields for a location (such as a street address) may be absent.
- jurisdiction: Location;
- }
-
- interface VersionResponse {
- // libtool-style representation of the Merchant protocol version, see
- // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning
- // The format is "current:revision:age".
- version: string;
-
- // Name of the protocol.
- name: "taler-merchant";
-
- // Currency supported by this backend.
- currency: string;
- }
- interface Location {
- // Nation with its own government.
- country?: string;
-
- // Identifies a subdivision of a country such as state, region, county.
- country_subdivision?: string;
-
- // Identifies a subdivision within a country sub-division.
- district?: string;
-
- // Name of a built-up area, with defined boundaries, and a local government.
- town?: string;
-
- // Specific location name within the town.
- town_location?: string;
-
- // Identifier consisting of a group of letters and/or numbers that
- // is added to a postal address to assist the sorting of mail.
- post_code?: string;
-
- // Name of a street or thoroughfare.
- street?: string;
-
- // Name of the building or house.
- building_name?: string;
-
- // Number that identifies the position of a building on a street.
- building_number?: string;
-
- // Free-form address lines, should not exceed 7 elements.
- address_lines?: string[];
- }
- namespace Instances {
- //POST /private/instances/$INSTANCE/auth
- interface InstanceAuthConfigurationMessage {
- // Type of authentication.
- // "external": The mechant backend does not do
- // any authentication checks. Instead an API
- // gateway must do the authentication.
- // "token": The merchant checks an auth token.
- // See "token" for details.
- method: "external" | "token";
-
- // For method "external", this field is mandatory.
- // The token MUST begin with the string "secret-token:".
- // After the auth token has been set (with method "token"),
- // the value must be provided in a "Authorization: Bearer $token"
- // header.
- token?: string;
- }
- //POST /private/instances
- interface InstanceConfigurationMessage {
- // Name of the merchant instance to create (will become $INSTANCE).
- id: string;
-
- // Merchant name corresponding to this instance.
- name: string;
-
- // Type of the user (business or individual).
- // Defaults to 'business'. Should become mandatory field
- // in the future, left as optional for API compatibility for now.
- user_type?: MerchantUserType;
-
- // Merchant email for customer contact.
- email?: string;
-
- // Merchant public website.
- website?: string;
-
- // Merchant logo.
- logo?: ImageDataUrl;
-
- // "Authentication" header required to authorize management access the instance.
- // Optional, if not given authentication will be disabled for
- // this instance (hopefully authentication checks are still
- // done by some reverse proxy).
- auth: InstanceAuthConfigurationMessage;
-
- // The merchant's physical address (to be put into contracts).
- address: Location;
-
- // The jurisdiction under which the merchant conducts its business
- // (to be put into contracts).
- jurisdiction: Location;
-
- // Use STEFAN curves to determine default fees?
- // If false, no fees are allowed by default.
- // Can always be overridden by the frontend on a per-order basis.
- use_stefan: boolean;
-
- // If the frontend does NOT specify an execution date, how long should
- // we tell the exchange to wait to aggregate transactions before
- // executing the wire transfer? This delay is added to the current
- // time when we generate the advisory execution time for the exchange.
- default_wire_transfer_delay: RelativeTime;
-
- // If the frontend does NOT specify a payment deadline, how long should
- // offers we make be valid by default?
- default_pay_delay: RelativeTime;
- }
-
- // PATCH /private/instances/$INSTANCE
- interface InstanceReconfigurationMessage {
-
- // Merchant name corresponding to this instance.
- name: string;
-
- // Type of the user (business or individual).
- // Defaults to 'business'. Should become mandatory field
- // in the future, left as optional for API compatibility for now.
- user_type?: MerchantUserType;
-
- // Merchant email for customer contact.
- email?: string;
-
- // Merchant public website.
- website?: string;
-
- // Merchant logo.
- logo?: ImageDataUrl;
-
- // The merchant's physical address (to be put into contracts).
- address: Location;
-
- // The jurisdiction under which the merchant conducts its business
- // (to be put into contracts).
- jurisdiction: Location;
-
- // Use STEFAN curves to determine default fees?
- // If false, no fees are allowed by default.
- // Can always be overridden by the frontend on a per-order basis.
- use_stefan: boolean;
-
- // If the frontend does NOT specify an execution date, how long should
- // we tell the exchange to wait to aggregate transactions before
- // executing the wire transfer? This delay is added to the current
- // time when we generate the advisory execution time for the exchange.
- default_wire_transfer_delay: RelativeTime;
-
- // If the frontend does NOT specify a payment deadline, how long should
- // offers we make be valid by default?
- default_pay_delay: RelativeTime;
- }
-
- // GET /private/instances
- interface InstancesResponse {
- // List of instances that are present in the backend (see Instance)
- instances: Instance[];
- }
-
- interface Instance {
- // Merchant name corresponding to this instance.
- name: string;
-
- // Type of the user ("business" or "individual").
- user_type: MerchantUserType;
-
- // Merchant public website.
- website?: string;
-
- // Merchant logo.
- logo?: ImageDataUrl;
-
- // Merchant instance this response is about ($INSTANCE)
- id: string;
-
- // Public key of the merchant/instance, in Crockford Base32 encoding.
- merchant_pub: EddsaPublicKey;
-
- // List of the payment targets supported by this instance. Clients can
- // specify the desired payment target in /order requests. Note that
- // front-ends do not have to support wallets selecting payment targets.
- payment_targets: string[];
-
- // Has this instance been deleted (but not purged)?
- deleted: boolean;
- }
-
- //GET /private/instances/$INSTANCE
- interface QueryInstancesResponse {
-
- // Merchant name corresponding to this instance.
- name: string;
- // Type of the user ("business" or "individual").
- user_type: MerchantUserType;
-
- // Merchant email for customer contact.
- email?: string;
-
- // Merchant public website.
- website?: string;
-
- // Merchant logo.
- logo?: ImageDataUrl;
-
- // Public key of the merchant/instance, in Crockford Base32 encoding.
- merchant_pub: EddsaPublicKey;
-
- // The merchant's physical address (to be put into contracts).
- address: Location;
-
- // The jurisdiction under which the merchant conducts its business
- // (to be put into contracts).
- jurisdiction: Location;
-
- // Use STEFAN curves to determine default fees?
- // If false, no fees are allowed by default.
- // Can always be overridden by the frontend on a per-order basis.
- use_stefan: boolean;
-
- // If the frontend does NOT specify an execution date, how long should
- // we tell the exchange to wait to aggregate transactions before
- // executing the wire transfer? This delay is added to the current
- // time when we generate the advisory execution time for the exchange.
- default_wire_transfer_delay: RelativeTime;
-
- // If the frontend does NOT specify a payment deadline, how long should
- // offers we make be valid by default?
- default_pay_delay: RelativeTime;
-
- // Authentication configuration.
- // Does not contain the token when token auth is configured.
- auth: {
- method: "external" | "token";
- };
- }
- // DELETE /private/instances/$INSTANCE
- interface LoginTokenRequest {
- // Scope of the token (which kinds of operations it will allow)
- scope: "readonly" | "write";
-
- // Server may impose its own upper bound
- // on the token validity duration
- duration?: RelativeTime;
-
- // Can this token be refreshed?
- // Defaults to false.
- refreshable?: boolean;
- }
- interface LoginTokenSuccessResponse {
- // The login token that can be used to access resources
- // that are in scope for some time. Must be prefixed
- // with "Bearer " when used in the "Authorization" HTTP header.
- // Will already begin with the RFC 8959 prefix.
- token: string;
-
- // Scope of the token (which kinds of operations it will allow)
- scope: "readonly" | "write";
-
- // Server may impose its own upper bound
- // on the token validity duration
- expiration: Timestamp;
-
- // Can this token be refreshed?
- refreshable: boolean;
- }
- }
-
- namespace KYC {
- //GET /private/instances/$INSTANCE/kyc
- interface AccountKycRedirects {
- // Array of pending KYCs.
- pending_kycs: MerchantAccountKycRedirect[];
-
- // Array of exchanges with no reply.
- timeout_kycs: ExchangeKycTimeout[];
- }
- interface MerchantAccountKycRedirect {
- // URL that the user should open in a browser to
- // proceed with the KYC process (as returned
- // by the exchange's /kyc-check/ endpoint).
- // Optional, missing if the account is blocked
- // due to AML and not due to KYC.
- kyc_url?: string;
-
- // Base URL of the exchange this is about.
- exchange_url: string;
-
- // AML status of the account.
- aml_status: number;
-
- // Our bank wire account this is about.
- payto_uri: string;
- }
- interface ExchangeKycTimeout {
- // Base URL of the exchange this is about.
- exchange_url: string;
-
- // Numeric error code indicating errors the exchange
- // returned, or TALER_EC_INVALID for none.
- exchange_code: number;
-
- // HTTP status code returned by the exchange when we asked for
- // information about the KYC status.
- // 0 if there was no response at all.
- exchange_http_status: number;
- }
-
- }
-
- namespace BankAccounts {
-
- interface AccountAddDetails {
-
- // payto:// URI of the account.
- payto_uri: string;
-
- // URL from where the merchant can download information
- // about incoming wire transfers to this account.
- credit_facade_url?: string;
-
- // Credentials to use when accessing the credit facade.
- // Never returned on a GET (as this may be somewhat
- // sensitive data). Can be set in POST
- // or PATCH requests to update (or delete) credentials.
- // To really delete credentials, set them to the type: "none".
- credit_facade_credentials?: FacadeCredentials;
-
- }
-
- type FacadeCredentials =
- | NoFacadeCredentials
- | BasicAuthFacadeCredentials;
-
- interface NoFacadeCredentials {
- type: "none";
- }
-
- interface BasicAuthFacadeCredentials {
- type: "basic";
-
- // Username to use to authenticate
- username: string;
-
- // Password to use to authenticate
- password: string;
- }
-
- interface AccountAddResponse {
- // Hash over the wire details (including over the salt).
- h_wire: HashCode;
-
- // Salt used to compute h_wire.
- salt: HashCode;
- }
-
- interface AccountPatchDetails {
-
- // URL from where the merchant can download information
- // about incoming wire transfers to this account.
- credit_facade_url?: string;
-
- // Credentials to use when accessing the credit facade.
- // Never returned on a GET (as this may be somewhat
- // sensitive data). Can be set in POST
- // or PATCH requests to update (or delete) credentials.
- // To really delete credentials, set them to the type: "none".
- credit_facade_credentials?: FacadeCredentials;
- }
-
-
- interface AccountsSummaryResponse {
-
- // List of accounts that are known for the instance.
- accounts: BankAccountEntry[];
- }
-
- interface BankAccountEntry {
- // payto:// URI of the account.
- payto_uri: string;
-
- // Hash over the wire details (including over the salt)
- h_wire: HashCode;
-
- // salt used to compute h_wire
- salt: HashCode;
-
- // URL from where the merchant can download information
- // about incoming wire transfers to this account.
- credit_facade_url?: string;
-
- // Credentials to use when accessing the credit facade.
- // Never returned on a GET (as this may be somewhat
- // sensitive data). Can be set in POST
- // or PATCH requests to update (or delete) credentials.
- credit_facade_credentials?: FacadeCredentials;
-
- // true if this account is active,
- // false if it is historic.
- active: boolean;
- }
-
- }
-
- namespace Products {
- // POST /private/products
- interface ProductAddDetail {
- // product ID to use.
- product_id: string;
-
- // Human-readable product description.
- description: string;
-
- // Map from IETF BCP 47 language tags to localized descriptions
- description_i18n: { [lang_tag: string]: string };
-
- // unit in which the product is measured (liters, kilograms, packages, etc.)
- unit: string;
-
- // The price for one unit of the product. Zero is used
- // to imply that this product is not sold separately, or
- // that the price is not fixed, and must be supplied by the
- // front-end. If non-zero, this price MUST include applicable
- // taxes.
- price: Amount;
-
- // An optional base64-encoded product image
- image: ImageDataUrl;
-
- // a list of taxes paid by the merchant for one unit of this product
- taxes: Tax[];
-
- // Number of units of the product in stock in sum in total,
- // including all existing sales ever. Given in product-specific
- // units.
- // A value of -1 indicates "infinite" (i.e. for "electronic" books).
- total_stock: Integer;
-
- // Identifies where the product is in stock.
- address: Location;
-
- // Identifies when we expect the next restocking to happen.
- next_restock?: Timestamp;
-
- // Minimum age buyer must have (in years). Default is 0.
- minimum_age?: Integer;
- }
- // PATCH /private/products/$PRODUCT_ID
- interface ProductPatchDetail {
- // Human-readable product description.
- description: string;
-
- // Map from IETF BCP 47 language tags to localized descriptions
- description_i18n: { [lang_tag: string]: string };
-
- // unit in which the product is measured (liters, kilograms, packages, etc.)
- unit: string;
-
- // The price for one unit of the product. Zero is used
- // to imply that this product is not sold separately, or
- // that the price is not fixed, and must be supplied by the
- // front-end. If non-zero, this price MUST include applicable
- // taxes.
- price: Amount;
-
- // An optional base64-encoded product image
- image: ImageDataUrl;
-
- // a list of taxes paid by the merchant for one unit of this product
- taxes: Tax[];
-
- // Number of units of the product in stock in sum in total,
- // including all existing sales ever. Given in product-specific
- // units.
- // A value of -1 indicates "infinite" (i.e. for "electronic" books).
- total_stock: Integer;
-
- // Number of units of the product that were lost (spoiled, stolen, etc.)
- total_lost: Integer;
-
- // Identifies where the product is in stock.
- address: Location;
-
- // Identifies when we expect the next restocking to happen.
- next_restock?: Timestamp;
-
- // Minimum age buyer must have (in years). Default is 0.
- minimum_age?: Integer;
- }
-
- // GET /private/products
- interface InventorySummaryResponse {
- // List of products that are present in the inventory
- products: InventoryEntry[];
- }
- interface InventoryEntry {
- // Product identifier, as found in the product.
- product_id: string;
- }
-
- // GET /private/products/$PRODUCT_ID
- interface ProductDetail {
- // Human-readable product description.
- description: string;
-
- // Map from IETF BCP 47 language tags to localized descriptions
- description_i18n: { [lang_tag: string]: string };
-
- // unit in which the product is measured (liters, kilograms, packages, etc.)
- unit: string;
-
- // The price for one unit of the product. Zero is used
- // to imply that this product is not sold separately, or
- // that the price is not fixed, and must be supplied by the
- // front-end. If non-zero, this price MUST include applicable
- // taxes.
- price: Amount;
-
- // An optional base64-encoded product image
- image: ImageDataUrl;
-
- // a list of taxes paid by the merchant for one unit of this product
- taxes: Tax[];
-
- // Number of units of the product in stock in sum in total,
- // including all existing sales ever. Given in product-specific
- // units.
- // A value of -1 indicates "infinite" (i.e. for "electronic" books).
- total_stock: Integer;
-
- // Number of units of the product that have already been sold.
- total_sold: Integer;
-
- // Number of units of the product that were lost (spoiled, stolen, etc.)
- total_lost: Integer;
-
- // Identifies where the product is in stock.
- address: Location;
-
- // Identifies when we expect the next restocking to happen.
- next_restock?: Timestamp;
-
- // Minimum age buyer must have (in years). Default is 0.
- minimum_age?: Integer;
- }
-
- // POST /private/products/$PRODUCT_ID/lock
- interface LockRequest {
- // UUID that identifies the frontend performing the lock
- // It is suggested that clients use a timeflake for this,
- // see https://github.com/anthonynsimon/timeflake
- lock_uuid: UUID;
-
- // How long does the frontend intend to hold the lock
- duration: RelativeTime;
-
- // How many units should be locked?
- quantity: Integer;
- }
-
- // DELETE /private/products/$PRODUCT_ID
- }
-
- namespace Orders {
- type MerchantOrderStatusResponse =
- | CheckPaymentPaidResponse
- | CheckPaymentClaimedResponse
- | CheckPaymentUnpaidResponse;
- interface CheckPaymentPaidResponse {
- // The customer paid for this contract.
- order_status: "paid";
-
- // Was the payment refunded (even partially)?
- refunded: boolean;
-
- // True if there are any approved refunds that the wallet has
- // not yet obtained.
- refund_pending: boolean;
-
- // Did the exchange wire us the funds?
- wired: boolean;
-
- // Total amount the exchange deposited into our bank account
- // for this contract, excluding fees.
- deposit_total: Amount;
-
- // Numeric error code indicating errors the exchange
- // encountered tracking the wire transfer for this purchase (before
- // we even got to specific coin issues).
- // 0 if there were no issues.
- exchange_ec: number;
-
- // HTTP status code returned by the exchange when we asked for
- // information to track the wire transfer for this purchase.
- // 0 if there were no issues.
- exchange_hc: number;
-
- // Total amount that was refunded, 0 if refunded is false.
- refund_amount: Amount;
-
- // Contract terms.
- contract_terms: ContractTerms;
-
- // The wire transfer status from the exchange for this order if
- // available, otherwise empty array.
- wire_details: TransactionWireTransfer[];
-
- // Reports about trouble obtaining wire transfer details,
- // empty array if no trouble were encountered.
- wire_reports: TransactionWireReport[];
-
- // The refund details for this order. One entry per
- // refunded coin; empty array if there are no refunds.
- refund_details: RefundDetails[];
-
- // Status URL, can be used as a redirect target for the browser
- // to show the order QR code / trigger the wallet.
- order_status_url: string;
- }
- interface CheckPaymentClaimedResponse {
- // A wallet claimed the order, but did not yet pay for the contract.
- order_status: "claimed";
-
- // Contract terms.
- contract_terms: ContractTerms;
- }
- interface CheckPaymentUnpaidResponse {
- // The order was neither claimed nor paid.
- order_status: "unpaid";
-
- // when was the order created
- creation_time: Timestamp;
-
- // Order summary text.
- summary: string;
-
- // Total amount of the order (to be paid by the customer).
- total_amount: Amount;
-
- // URI that the wallet must process to complete the payment.
- taler_pay_uri: string;
-
- // Alternative order ID which was paid for already in the same session.
- // Only given if the same product was purchased before in the same session.
- already_paid_order_id?: string;
-
- // Fulfillment URL of an already paid order. Only given if under this
- // session an already paid order with a fulfillment URL exists.
- already_paid_fulfillment_url?: string;
-
- // Status URL, can be used as a redirect target for the browser
- // to show the order QR code / trigger the wallet.
- order_status_url: string;
-
- // We do we NOT return the contract terms here because they may not
- // exist in case the wallet did not yet claim them.
- }
- interface RefundDetails {
- // Reason given for the refund.
- reason: string;
-
- // When was the refund approved.
- timestamp: Timestamp;
-
- // Set to true if a refund is still available for the wallet for this payment.
- pending: boolean;
-
- // Total amount that was refunded (minus a refund fee).
- amount: Amount;
- }
- interface TransactionWireTransfer {
- // Responsible exchange.
- exchange_url: string;
-
- // 32-byte wire transfer identifier.
- wtid: Base32;
-
- // Execution time of the wire transfer.
- execution_time: Timestamp;
-
- // Total amount that has been wire transferred
- // to the merchant.
- amount: Amount;
-
- // Was this transfer confirmed by the merchant via the
- // POST /transfers API, or is it merely claimed by the exchange?
- confirmed: boolean;
- }
- interface TransactionWireReport {
- // Numerical error code.
- code: number;
-
- // Human-readable error description.
- hint: string;
-
- // Numerical error code from the exchange.
- exchange_ec: number;
-
- // HTTP status code received from the exchange.
- exchange_hc: number;
-
- // Public key of the coin for which we got the exchange error.
- coin_pub: CoinPublicKey;
- }
-
- interface OrderHistory {
- // timestamp-sorted array of all orders matching the query.
- // The order of the sorting depends on the sign of delta.
- orders: OrderHistoryEntry[];
- }
- interface OrderHistoryEntry {
- // order ID of the transaction related to this entry.
- order_id: string;
-
- // row ID of the order in the database
- row_id: number;
-
- // when the order was created
- timestamp: Timestamp;
-
- // the amount of money the order is for
- amount: Amount;
-
- // the summary of the order
- summary: string;
-
- // whether some part of the order is refundable,
- // that is the refund deadline has not yet expired
- // and the total amount refunded so far is below
- // the value of the original transaction.
- refundable: boolean;
-
- // whether the order has been paid or not
- paid: boolean;
- }
-
- interface PostOrderRequest {
- // The order must at least contain the minimal
- // order detail, but can override all
- order: Order;
-
- // if set, the backend will then set the refund deadline to the current
- // time plus the specified delay. If it's not set, refunds will not be
- // possible.
- refund_delay?: RelativeTime;
-
- // specifies the payment target preferred by the client. Can be used
- // to select among the various (active) wire methods supported by the instance.
- payment_target?: string;
-
- // specifies that some products are to be included in the
- // order from the inventory. For these inventory management
- // is performed (so the products must be in stock) and
- // details are completed from the product data of the backend.
- inventory_products?: MinimalInventoryProduct[];
-
- // Specifies a lock identifier that was used to
- // lock a product in the inventory. Only useful if
- // manage_inventory is set. Used in case a frontend
- // reserved quantities of the individual products while
- // the shopping card was being built. Multiple UUIDs can
- // be used in case different UUIDs were used for different
- // products (i.e. in case the user started with multiple
- // shopping sessions that were combined during checkout).
- lock_uuids?: UUID[];
-
- // Should a token for claiming the order be generated?
- // False can make sense if the ORDER_ID is sufficiently
- // high entropy to prevent adversarial claims (like it is
- // if the backend auto-generates one). Default is 'true'.
- create_token?: boolean;
-
- // OTP device ID to associate with the order.
- // This parameter is optional.
- otp_id?: string;
- }
- type Order = MinimalOrderDetail | ContractTerms;
-
- interface MinimalOrderDetail {
- // Amount to be paid by the customer
- amount: Amount;
-
- // Short summary of the order
- summary: string;
-
- // URL that will show that the order was successful after
- // it has been paid for. Optional. When POSTing to the
- // merchant, the placeholder "${ORDER_ID}" will be
- // replaced with the actual order ID (useful if the
- // order ID is generated server-side and needs to be
- // in the URL).
- fulfillment_url?: string;
- }
-
- interface MinimalInventoryProduct {
- // Which product is requested (here mandatory!)
- product_id: string;
-
- // How many units of the product are requested
- quantity: Integer;
- }
- interface PostOrderResponse {
- // Order ID of the response that was just created
- order_id: string;
-
- // Token that authorizes the wallet to claim the order.
- // Provided only if "create_token" was set to 'true'
- // in the request.
- token?: ClaimToken;
- }
- interface OutOfStockResponse {
- // Product ID of an out-of-stock item
- product_id: string;
-
- // Requested quantity
- requested_quantity: Integer;
-
- // Available quantity (must be below requested_quanitity)
- available_quantity: Integer;
-
- // When do we expect the product to be again in stock?
- // Optional, not given if unknown.
- restock_expected?: Timestamp;
- }
-
- interface ForgetRequest {
- // Array of valid JSON paths to forgettable fields in the order's
- // contract terms.
- fields: string[];
- }
- interface RefundRequest {
- // Amount to be refunded
- refund: Amount;
-
- // Human-readable refund justification
- reason: string;
- }
- interface MerchantRefundResponse {
- // URL (handled by the backend) that the wallet should access to
- // trigger refund processing.
- // taler://refund/...
- taler_refund_uri: string;
-
- // Contract hash that a client may need to authenticate an
- // HTTP request to obtain the above URI in a wallet-friendly way.
- h_contract: HashCode;
- }
- }
-
- namespace Rewards {
- // GET /private/reserves
- interface RewardReserveStatus {
- // Array of all known reserves (possibly empty!)
- reserves: ReserveStatusEntry[];
- }
- interface ReserveStatusEntry {
- // Public key of the reserve
- reserve_pub: EddsaPublicKey;
-
- // Timestamp when it was established
- creation_time: Timestamp;
-
- // Timestamp when it expires
- expiration_time: Timestamp;
-
- // Initial amount as per reserve creation call
- merchant_initial_amount: Amount;
-
- // Initial amount as per exchange, 0 if exchange did
- // not confirm reserve creation yet.
- exchange_initial_amount: Amount;
-
- // Amount picked up so far.
- pickup_amount: Amount;
-
- // Amount approved for rewards that exceeds the pickup_amount.
- committed_amount: Amount;
-
- // Is this reserve active (false if it was deleted but not purged)
- active: boolean;
- }
-
- interface ReserveCreateRequest {
- // Amount that the merchant promises to put into the reserve
- initial_balance: Amount;
-
- // Exchange the merchant intends to use for reward
- exchange_url: string;
-
- // Desired wire method, for example "iban" or "x-taler-bank"
- wire_method: string;
- }
- interface ReserveCreateConfirmation {
- // Public key identifying the reserve
- reserve_pub: EddsaPublicKey;
-
- // Wire accounts of the exchange where to transfer the funds.
- accounts: WireAccount[];
- }
- interface RewardCreateRequest {
- // Amount that the customer should be reward
- amount: Amount;
-
- // Justification for giving the reward
- justification: string;
-
- // URL that the user should be directed to after rewarding,
- // will be included in the reward_token.
- next_url: string;
- }
- interface RewardCreateConfirmation {
- // Unique reward identifier for the reward that was created.
- reward_id: HashCode;
-
- // taler://reward URI for the reward
- taler_reward_uri: string;
-
- // URL that will directly trigger processing
- // the reward when the browser is redirected to it
- reward_status_url: string;
-
- // when does the reward expire
- reward_expiration: Timestamp;
- }
-
- interface ReserveDetail {
- // Timestamp when it was established.
- creation_time: Timestamp;
-
- // Timestamp when it expires.
- expiration_time: Timestamp;
-
- // Initial amount as per reserve creation call.
- merchant_initial_amount: Amount;
-
- // Initial amount as per exchange, 0 if exchange did
- // not confirm reserve creation yet.
- exchange_initial_amount: Amount;
-
- // Amount picked up so far.
- pickup_amount: Amount;
-
- // Amount approved for rewards that exceeds the pickup_amount.
- committed_amount: Amount;
-
- // Array of all rewards created by this reserves (possibly empty!).
- // Only present if asked for explicitly.
- rewards?: RewardStatusEntry[];
-
- // Is this reserve active (false if it was deleted but not purged)?
- active: boolean;
-
- // Array of wire accounts of the exchange that could
- // be used to fill the reserve, can be NULL
- // if the reserve is inactive or was already filled
- accounts?: WireAccount[];
-
- // URL of the exchange hosting the reserve,
- // NULL if the reserve is inactive
- exchange_url: string;
- }
-
- interface RewardStatusEntry {
- // Unique identifier for the reward.
- reward_id: HashCode;
-
- // Total amount of the reward that can be withdrawn.
- total_amount: Amount;
-
- // Human-readable reason for why the reward was granted.
- reason: string;
- }
-
- interface RewardDetails {
- // Amount that we authorized for this reward.
- total_authorized: Amount;
-
- // Amount that was picked up by the user already.
- total_picked_up: Amount;
-
- // Human-readable reason given when authorizing the reward.
- reason: string;
-
- // Timestamp indicating when the reward is set to expire (may be in the past).
- expiration: Timestamp;
-
- // Reserve public key from which the reward is funded.
- reserve_pub: EddsaPublicKey;
-
- // Array showing the pickup operations of the wallet (possibly empty!).
- // Only present if asked for explicitly.
- pickups?: PickupDetail[];
- }
- interface PickupDetail {
- // Unique identifier for the pickup operation.
- pickup_id: HashCode;
-
- // Number of planchets involved.
- num_planchets: Integer;
-
- // Total amount requested for this pickup_id.
- requested_amount: Amount;
- }
- }
-
- namespace Transfers {
- interface TransferList {
- // list of all the transfers that fit the filter that we know
- transfers: TransferDetails[];
- }
- interface TransferDetails {
- // how much was wired to the merchant (minus fees)
- credit_amount: Amount;
-
- // raw wire transfer identifier identifying the wire transfer (a base32-encoded value)
- wtid: string;
-
- // target account that received the wire transfer
- payto_uri: string;
-
- // base URL of the exchange that made the wire transfer
- exchange_url: string;
-
- // Serial number identifying the transfer in the merchant backend.
- // Used for filgering via offset.
- transfer_serial_id: number;
-
- // Time of the execution of the wire transfer by the exchange, according to the exchange
- // Only provided if we did get an answer from the exchange.
- execution_time?: Timestamp;
-
- // True if we checked the exchange's answer and are happy with it.
- // False if we have an answer and are unhappy, missing if we
- // do not have an answer from the exchange.
- verified?: boolean;
-
- // True if the merchant uses the POST /transfers API to confirm
- // that this wire transfer took place (and it is thus not
- // something merely claimed by the exchange).
- confirmed?: boolean;
- }
-
- interface TransferInformation {
- // how much was wired to the merchant (minus fees)
- credit_amount: Amount;
-
- // raw wire transfer identifier identifying the wire transfer (a base32-encoded value)
- wtid: WireTransferIdentifierRawP;
-
- // target account that received the wire transfer
- payto_uri: string;
-
- // base URL of the exchange that made the wire transfer
- exchange_url: string;
- }
- }
-
- namespace OTP {
- interface OtpDeviceAddDetails {
- // Device ID to use.
- otp_device_id: string;
-
- // Human-readable description for the device.
- otp_device_description: string;
-
- // A base64-encoded key
- otp_key: string;
-
- // Algorithm for computing the POS confirmation.
- otp_algorithm: Integer;
-
- // Counter for counter-based OTP devices.
- otp_ctr?: Integer;
- }
-
- interface OtpDevicePatchDetails {
- // Human-readable description for the device.
- otp_device_description: string;
-
- // A base64-encoded key
- otp_key: string | undefined;
-
- // Algorithm for computing the POS confirmation.
- otp_algorithm: Integer;
-
- // Counter for counter-based OTP devices.
- otp_ctr?: Integer;
- }
-
- interface OtpDeviceSummaryResponse {
- // Array of devices that are present in our backend.
- otp_devices: OtpDeviceEntry[];
- }
- interface OtpDeviceEntry {
- // Device identifier.
- otp_device_id: string;
-
- // Human-readable description for the device.
- device_description: string;
- }
-
- interface OtpDeviceDetails {
- // Human-readable description for the device.
- device_description: string;
-
- // Algorithm for computing the POS confirmation.
- otp_algorithm: Integer;
-
- // Counter for counter-based OTP devices.
- otp_ctr?: Integer;
- }
-
-
- }
- namespace Template {
- interface TemplateAddDetails {
- // Template ID to use.
- template_id: string;
-
- // Human-readable description for the template.
- template_description: string;
-
- // OTP device ID.
- // This parameter is optional.
- otp_id?: string;
-
- // Additional information in a separate template.
- template_contract: TemplateContractDetails;
- }
- interface TemplateContractDetails {
- // Human-readable summary for the template.
- summary?: string;
-
- // The price is imposed by the merchant and cannot be changed by the customer.
- // This parameter is optional.
- amount?: Amount;
-
- // Minimum age buyer must have (in years). Default is 0.
- minimum_age: Integer;
-
- // The time the customer need to pay before his order will be deleted.
- // It is deleted if the customer did not pay and if the duration is over.
- pay_duration: RelativeTime;
- }
- interface TemplatePatchDetails {
- // Human-readable description for the template.
- template_description: string;
-
- // OTP device ID.
- // This parameter is optional.
- otp_id?: string;
-
- // Additional information in a separate template.
- template_contract: TemplateContractDetails;
- }
-
- interface TemplateSummaryResponse {
- // List of templates that are present in our backend.
- templates: TemplateEntry[];
- }
-
- interface TemplateEntry {
- // Template identifier, as found in the template.
- template_id: string;
-
- // Human-readable description for the template.
- template_description: string;
- }
-
- interface TemplateDetails {
- // Human-readable description for the template.
- template_description: string;
-
- // OTP device ID.
- // This parameter is optional.
- otp_id?: string;
-
- // Additional information in a separate template.
- template_contract: TemplateContractDetails;
- }
-
- interface UsingTemplateDetails {
- // Subject of the template
- summary?: string;
-
- // The amount entered by the customer.
- amount?: Amount;
- }
-
- interface UsingTemplateResponse {
- // After enter the request. The user will be pay with a taler URL.
- order_id: string;
- token: string;
- }
- }
-
- namespace Webhooks {
- type MerchantWebhookType = "pay" | "refund";
- interface WebhookAddDetails {
- // Webhook ID to use.
- webhook_id: string;
-
- // The event of the webhook: why the webhook is used.
- event_type: MerchantWebhookType;
-
- // URL of the webhook where the customer will be redirected.
- url: string;
-
- // Method used by the webhook
- http_method: string;
-
- // Header template of the webhook
- header_template?: string;
-
- // Body template by the webhook
- body_template?: string;
- }
- interface WebhookPatchDetails {
- // The event of the webhook: why the webhook is used.
- event_type: string;
-
- // URL of the webhook where the customer will be redirected.
- url: string;
-
- // Method used by the webhook
- http_method: string;
-
- // Header template of the webhook
- header_template?: string;
-
- // Body template by the webhook
- body_template?: string;
- }
- interface WebhookSummaryResponse {
- // List of webhooks that are present in our backend.
- webhooks: WebhookEntry[];
- }
- interface WebhookEntry {
- // Webhook identifier, as found in the webhook.
- webhook_id: string;
-
- // The event of the webhook: why the webhook is used.
- event_type: string;
- }
- interface WebhookDetails {
- // The event of the webhook: why the webhook is used.
- event_type: string;
-
- // URL of the webhook where the customer will be redirected.
- url: string;
-
- // Method used by the webhook
- http_method: string;
-
- // Header template of the webhook
- header_template?: string;
-
- // Body template by the webhook
- body_template?: string;
- }
- }
-
- namespace TokenFamilies {
- // Kind of the token family.
- type TokenFamilyKind = "discount" | "subscription";
-
- // POST /private/tokenfamilies
- interface TokenFamilyAddDetail {
- // Identifier for the token family consisting of unreserved characters
- // according to RFC 3986.
- slug: string;
-
- // Human-readable name for the token family.
- name: string;
-
- // Human-readable description for the token family.
- description: string;
-
- // Optional map from IETF BCP 47 language tags to localized descriptions.
- description_i18n?: { [lang_tag: string]: string };
-
- // Start time of the token family's validity period.
- // If not specified, merchant backend will use the current time.
- valid_after?: Timestamp;
-
- // End time of the token family's validity period.
- valid_before: Timestamp;
-
- // Validity duration of an issued token.
- duration: RelativeTime;
-
- // Kind of the token family.
- kind: TokenFamilyKind;
- }
-
- // PATCH /private/tokenfamilies/$SLUG
- interface TokenFamilyPatchDetail {
- // Human-readable name for the token family.
- name: string;
-
- // Human-readable description for the token family.
- description: string;
-
- // Optional map from IETF BCP 47 language tags to localized descriptions.
- description_i18n: { [lang_tag: string]: string };
-
- // Start time of the token family's validity period.
- valid_after: Timestamp;
-
- // End time of the token family's validity period.
- valid_before: Timestamp;
-
- // Validity duration of an issued token.
- duration: RelativeTime;
- }
-
- // GET /private/tokenfamilies
- interface TokenFamilySummaryResponse {
- // All configured token families of this instance.
- token_families: TokenFamilyEntry[];
- }
-
- interface TokenFamilyEntry {
- // Identifier for the token family consisting of unreserved characters
- // according to RFC 3986.
- slug: string;
-
- // Human-readable name for the token family.
- name: string;
-
- // Start time of the token family's validity period.
- valid_after: Timestamp;
-
- // End time of the token family's validity period.
- valid_before: Timestamp;
-
- // Kind of the token family.
- kind: TokenFamilyKind;
- }
-
- // GET /private/tokenfamilies/$SLUG
- interface TokenFamilyDetail {
- // Identifier for the token family consisting of unreserved characters
- // according to RFC 3986.
- slug: string;
-
- // Human-readable name for the token family.
- name: string;
-
- // Human-readable description for the token family.
- description: string;
-
- // Optional map from IETF BCP 47 language tags to localized descriptions.
- description_i18n?: { [lang_tag: string]: string };
-
- // Start time of the token family's validity period.
- valid_after: Timestamp;
-
- // End time of the token family's validity period.
- valid_before: Timestamp;
-
- // Validity duration of an issued token.
- duration: RelativeTime;
-
- // Kind of the token family.
- kind: TokenFamilyKind;
-
- // How many tokens have been issued for this family.
- issued: Integer;
-
- // How many tokens have been redeemed for this family.
- redeemed: Integer;
- }
-
- }
-
- interface ContractTerms {
- // Human-readable description of the whole purchase
- summary: string;
-
- // Map from IETF BCP 47 language tags to localized summaries
- summary_i18n?: { [lang_tag: string]: string };
-
- // Unique, free-form identifier for the proposal.
- // Must be unique within a merchant instance.
- // For merchants that do not store proposals in their DB
- // before the customer paid for them, the order_id can be used
- // by the frontend to restore a proposal from the information
- // encoded in it (such as a short product identifier and timestamp).
- order_id: string;
-
- // Total price for the transaction.
- // The exchange will subtract deposit fees from that amount
- // before transferring it to the merchant.
- amount: Amount;
-
- // The URL for this purchase. Every time is is visited, the merchant
- // will send back to the customer the same proposal. Clearly, this URL
- // can be bookmarked and shared by users.
- fulfillment_url?: string;
-
- // Maximum total deposit fee accepted by the merchant for this contract
- max_fee: Amount;
-
- // List of products that are part of the purchase (see Product).
- products: Product[];
-
- // Time when this contract was generated
- timestamp: TalerProtocolTimestamp;
-
- // After this deadline has passed, no refunds will be accepted.
- refund_deadline: TalerProtocolTimestamp;
-
- // After this deadline, the merchant won't accept payments for the contact
- pay_deadline: TalerProtocolTimestamp;
-
- // Transfer deadline for the exchange. Must be in the
- // deposit permissions of coins used to pay for this order.
- wire_transfer_deadline: TalerProtocolTimestamp;
-
- // Merchant's public key used to sign this proposal; this information
- // is typically added by the backend Note that this can be an ephemeral key.
- merchant_pub: EddsaPublicKey;
-
- // Base URL of the (public!) merchant backend API.
- // Must be an absolute URL that ends with a slash.
- merchant_base_url: string;
-
- // More info about the merchant, see below
- merchant: Merchant;
-
- // The hash of the merchant instance's wire details.
- h_wire: HashCode;
-
- // Wire transfer method identifier for the wire method associated with h_wire.
- // The wallet may only select exchanges via a matching auditor if the
- // exchange also supports this wire method.
- // The wire transfer fees must be added based on this wire transfer method.
- wire_method: string;
-
- // Any exchanges audited by these auditors are accepted by the merchant.
- auditors: Auditor[];
-
- // Exchanges that the merchant accepts even if it does not accept any auditors that audit them.
- exchanges: Exchange[];
-
- // Delivery location for (all!) products.
- delivery_location?: Location;
-
- // Time indicating when the order should be delivered.
- // May be overwritten by individual products.
- delivery_date?: TalerProtocolTimestamp;
-
- // Nonce generated by the wallet and echoed by the merchant
- // in this field when the proposal is generated.
- nonce: string;
-
- // Specifies for how long the wallet should try to get an
- // automatic refund for the purchase. If this field is
- // present, the wallet should wait for a few seconds after
- // the purchase and then automatically attempt to obtain
- // a refund. The wallet should probe until "delay"
- // after the payment was successful (i.e. via long polling
- // or via explicit requests with exponential back-off).
- //
- // In particular, if the wallet is offline
- // at that time, it MUST repeat the request until it gets
- // one response from the merchant after the delay has expired.
- // If the refund is granted, the wallet MUST automatically
- // recover the payment. This is used in case a merchant
- // knows that it might be unable to satisfy the contract and
- // desires for the wallet to attempt to get the refund without any
- // customer interaction. Note that it is NOT an error if the
- // merchant does not grant a refund.
- auto_refund?: RelativeTime;
-
- // Extra data that is only interpreted by the merchant frontend.
- // Useful when the merchant needs to store extra information on a
- // contract without storing it separately in their database.
- extra?: any;
-
- // Minimum age buyer must have (in years). Default is 0.
- minimum_age?: Integer;
- }
-}
diff --git a/packages/merchant-backoffice-ui/src/hooks/async.ts b/packages/merchant-backoffice-ui/src/hooks/async.ts
index 212ef2211..e4e50ab8e 100644
--- a/packages/merchant-backoffice-ui/src/hooks/async.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/async.ts
@@ -25,7 +25,7 @@ export interface Options {
}
export interface AsyncOperationApi<T> {
- request: (...a: any) => void;
+ request: (...a: unknown[]) => void;
cancel: () => void;
data: T | undefined;
isSlow: boolean;
@@ -34,15 +34,15 @@ export interface AsyncOperationApi<T> {
}
export function useAsync<T>(
- fn?: (...args: any) => Promise<T>,
+ fn?: (...args: unknown[]) => Promise<T>,
{ slowTolerance: tooLong }: Options = { slowTolerance: 1000 },
): AsyncOperationApi<T> {
const [data, setData] = useState<T | undefined>(undefined);
const [isLoading, setLoading] = useState<boolean>(false);
- const [error, setError] = useState<any>(undefined);
+ const [error, setError] = useState<string>();
const [isSlow, setSlow] = useState(false);
- const request = async (...args: any) => {
+ const request = async (...args: unknown[]) => {
if (!fn) return;
setLoading(true);
@@ -54,7 +54,7 @@ export function useAsync<T>(
const result = await fn(...args);
setData(result);
} catch (error) {
- setError(error);
+ setError(error instanceof Error ? error.message : String(error));
}
setLoading(false);
setSlow(false);
diff --git a/packages/merchant-backoffice-ui/src/hooks/bank.ts b/packages/merchant-backoffice-ui/src/hooks/bank.ts
index 4c917fe9e..0a1d63449 100644
--- a/packages/merchant-backoffice-ui/src/hooks/bank.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/bank.ts
@@ -13,7 +13,6 @@
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { useMerchantApiContext } from "@gnu-taler/web-util/browser";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
import {
@@ -35,15 +34,12 @@ export function revalidateInstanceBankAccounts() {
);
}
export function useInstanceBankAccounts() {
- const { state: session } = useSessionContext();
- const {
- lib: { instance },
- } = useSessionContext();
+ const { state, lib } = useSessionContext();
// const [offset, setOffset] = useState<string | undefined>();
async function fetcher([token, _bid]: [AccessToken, string]) {
- return await instance.listBankAccounts(token, {
+ return await lib.instance.listBankAccounts(token, {
// limit: PAGINATED_LIST_REQUEST,
// offset: bid,
// order: "dec",
@@ -53,7 +49,7 @@ export function useInstanceBankAccounts() {
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listBankAccounts">,
TalerHttpError
- >([session.token, "offset", "listBankAccounts"], fetcher);
+ >([state.token, "offset", "listBankAccounts"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
@@ -74,19 +70,16 @@ export function revalidateBankAccountDetails() {
);
}
export function useBankAccountDetails(h_wire: string) {
- const { state: session } = useSessionContext();
- const {
- lib: { instance },
- } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([token, wireId]: [AccessToken, string]) {
- return await instance.getBankAccountDetails(token, wireId);
+ return await lib.instance.getBankAccountDetails(token, wireId);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getBankAccountDetails">,
TalerHttpError
- >([session.token, h_wire, "getBankAccountDetails"], fetcher);
+ >([state.token, h_wire, "getBankAccountDetails"], fetcher);
if (data) return data;
if (error) return error;
diff --git a/packages/merchant-backoffice-ui/src/hooks/category.ts b/packages/merchant-backoffice-ui/src/hooks/category.ts
new file mode 100644
index 000000000..094416ae3
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/hooks/category.ts
@@ -0,0 +1,78 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from "@gnu-taler/taler-util";
+import _useSWR, { SWRHook, mutate } from "swr";
+import { useSessionContext } from "../context/session.js";
+const useSWR = _useSWR as unknown as SWRHook;
+
+export function revalidateInstanceCategories() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "listCategories",
+ undefined,
+ { revalidate: true },
+ );
+}
+export function useInstanceCategories() {
+ const { state, lib } = useSessionContext();
+
+ // const [offset, setOffset] = useState<string | undefined>();
+
+ async function fetcher([token, _bid]: [AccessToken, string]) {
+ return await lib.instance.listCategories(token, {
+ // limit: PAGINATED_LIST_REQUEST,
+ // offset: bid,
+ // order: "dec",
+ });
+ }
+
+ const { data, error } = useSWR<
+ TalerMerchantManagementResultByMethod<"listCategories">,
+ TalerHttpError
+ >([state.token, "offset", "listCategories"], fetcher);
+
+ if (error) return error;
+ if (data === undefined) return undefined;
+ if (data.type !== "ok") return data;
+
+ // return buildPaginatedResult(data.body.otp_devices, offset, setOffset, (d) => d.otp_device_id)
+ return data;
+}
+
+export function revalidateCategoryDetails() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "getCategoryDetails",
+ undefined,
+ { revalidate: true },
+ );
+}
+export function useCategoryDetails(deviceId: string) {
+ const { state, lib } = useSessionContext();
+
+ async function fetcher([dId, token]: [string, AccessToken]) {
+ return await lib.instance.getCategoryDetails(token, dId);
+ }
+
+ const { data, error } = useSWR<
+ TalerMerchantManagementResultByMethod<"getCategoryDetails">,
+ TalerHttpError
+ >([deviceId, state.token, "getCategoryDetails"], fetcher);
+
+ if (data) return data;
+ if (error) return error;
+ return undefined;
+}
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts
index f5f8893cd..a25b33f46 100644
--- a/packages/merchant-backoffice-ui/src/hooks/instance.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts
@@ -15,31 +15,34 @@
*/
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from "@gnu-taler/taler-util";
+import {
+ AccessToken,
+ TalerHttpError,
+ TalerMerchantManagementResultByMethod,
+} from "@gnu-taler/taler-util";
import _useSWR, { SWRHook, mutate } from "swr";
import { useSessionContext } from "../context/session.js";
const useSWR = _useSWR as unknown as SWRHook;
-
export function revalidateInstanceDetails() {
return mutate(
- (key) => Array.isArray(key) && key[key.length - 1] === "getCurrentInstanceDetails",
+ (key) =>
+ Array.isArray(key) && key[key.length - 1] === "getCurrentInstanceDetails",
undefined,
{ revalidate: true },
);
}
export function useInstanceDetails() {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([token]: [AccessToken]) {
- return await instance.getCurrentInstanceDetails(token);
+ return await lib.instance.getCurrentInstanceDetails(token);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getCurrentInstanceDetails">,
TalerHttpError
- >([session.token, "getCurrentInstanceDetails"], fetcher);
+ >([state.token, "getCurrentInstanceDetails"], fetcher);
if (data) return data;
if (error) return error;
@@ -48,29 +51,28 @@ export function useInstanceDetails() {
export function revalidateInstanceKYCDetails() {
return mutate(
- (key) => Array.isArray(key) && key[key.length - 1] === "getCurrentIntanceKycStatus",
+ (key) =>
+ Array.isArray(key) &&
+ key[key.length - 1] === "getCurrentIntanceKycStatus",
undefined,
{ revalidate: true },
);
}
export function useInstanceKYCDetails() {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([token]: [AccessToken]) {
- return await instance.getCurrentIntanceKycStatus(token, {});
+ return await lib.instance.getCurrentIntanceKycStatus(token, {});
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getCurrentIntanceKycStatus">,
TalerHttpError
- >([session.token, "getCurrentIntanceKycStatus"], fetcher);
+ >([state.token, "getCurrentIntanceKycStatus"], fetcher);
if (data) return data;
if (error) return error;
return undefined;
-
-
}
export function revalidateManagedInstanceDetails() {
@@ -81,17 +83,16 @@ export function revalidateManagedInstanceDetails() {
);
}
export function useManagedInstanceDetails(instanceId: string) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([token, instanceId]: [AccessToken, string]) {
- return await instance.getInstanceDetails(token, instanceId);
+ return await lib.instance.getInstanceDetails(token, instanceId);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getInstanceDetails">,
TalerHttpError
- >([session.token, instanceId, "getInstanceDetails"], fetcher);
+ >([state.token, instanceId, "getInstanceDetails"], fetcher);
if (data) return data;
if (error) return error;
@@ -106,17 +107,16 @@ export function revalidateBackendInstances() {
);
}
export function useBackendInstances() {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([token]: [AccessToken]) {
- return await instance.listInstances(token);
+ return await lib.instance.listInstances(token);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listInstances">,
TalerHttpError
- >([session.token, "listInstances"], fetcher);
+ >([state.token, "listInstances"], fetcher);
if (data) return data;
if (error) return error;
diff --git a/packages/merchant-backoffice-ui/src/hooks/order.ts b/packages/merchant-backoffice-ui/src/hooks/order.ts
index d0513dc40..ecdcd5f45 100644
--- a/packages/merchant-backoffice-ui/src/hooks/order.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/order.ts
@@ -32,17 +32,16 @@ export function revalidateOrderDetails() {
);
}
export function useOrderDetails(oderId: string) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([dId, token]: [string, AccessToken]) {
- return await instance.getOrderDetails(token, dId);
+ return await lib.instance.getOrderDetails(token, dId);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getOrderDetails">,
TalerHttpError
- >([oderId, session.token, "getOrderDetails"], fetcher);
+ >([oderId, state.token, "getOrderDetails"], fetcher);
if (data) return data;
if (error) return error;
@@ -68,13 +67,12 @@ export function useInstanceOrders(
args?: InstanceOrderFilter,
updatePosition: (d: string | undefined) => void = () => { },
) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
// const [offset, setOffset] = useState<string | undefined>(args?.position);
async function fetcher([token, o, p, r, w, d]: [AccessToken, string, boolean, boolean, boolean, AbsoluteTime]) {
- return await instance.listOrders(token, {
+ return await lib.instance.listOrders(token, {
limit: PAGINATED_LIST_REQUEST,
offset: o,
order: "dec",
@@ -88,7 +86,7 @@ export function useInstanceOrders(
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listOrders">,
TalerHttpError
- >([session.token, args?.position, args?.paid, args?.refunded, args?.wired, args?.date, "listOrders"], fetcher);
+ >([state.token, args?.position, args?.paid, args?.refunded, args?.wired, args?.date, "listOrders"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
diff --git a/packages/merchant-backoffice-ui/src/hooks/otp.ts b/packages/merchant-backoffice-ui/src/hooks/otp.ts
index 41ed89f70..d181198db 100644
--- a/packages/merchant-backoffice-ui/src/hooks/otp.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/otp.ts
@@ -28,13 +28,12 @@ export function revalidateInstanceOtpDevices() {
);
}
export function useInstanceOtpDevices() {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
// const [offset, setOffset] = useState<string | undefined>();
async function fetcher([token, _bid]: [AccessToken, string]) {
- return await instance.listOtpDevices(token, {
+ return await lib.instance.listOtpDevices(token, {
// limit: PAGINATED_LIST_REQUEST,
// offset: bid,
// order: "dec",
@@ -44,7 +43,7 @@ export function useInstanceOtpDevices() {
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listOtpDevices">,
TalerHttpError
- >([session.token, "offset", "listOtpDevices"], fetcher);
+ >([state.token, "offset", "listOtpDevices"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
@@ -62,17 +61,16 @@ export function revalidateOtpDeviceDetails() {
);
}
export function useOtpDeviceDetails(deviceId: string) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([dId, token]: [string, AccessToken]) {
- return await instance.getOtpDeviceDetails(token, dId);
+ return await lib.instance.getOtpDeviceDetails(token, dId);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getOtpDeviceDetails">,
TalerHttpError
- >([deviceId, session.token, "getOtpDeviceDetails"], fetcher);
+ >([deviceId, state.token, "getOtpDeviceDetails"], fetcher);
if (data) return data;
if (error) return error;
diff --git a/packages/merchant-backoffice-ui/src/hooks/preference.ts b/packages/merchant-backoffice-ui/src/hooks/preference.ts
index fddbc6e08..705422654 100644
--- a/packages/merchant-backoffice-ui/src/hooks/preference.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/preference.ts
@@ -28,6 +28,7 @@ import { buildStorageKey, useLocalStorage } from "@gnu-taler/web-util/browser";
export interface Preferences {
advanceOrderMode: boolean;
advanceInstanceMode: boolean;
+ developerMode: boolean;
hideKycUntil: AbsoluteTime;
hideMissingAccountUntil: AbsoluteTime;
dateFormat: "ymd" | "dmy" | "mdy";
@@ -36,6 +37,7 @@ export interface Preferences {
const defaultSettings: Preferences = {
advanceOrderMode: false,
advanceInstanceMode: false,
+ developerMode: false,
hideKycUntil: AbsoluteTime.never(),
hideMissingAccountUntil: AbsoluteTime.never(),
dateFormat: "ymd",
@@ -45,6 +47,7 @@ export const codecForPreferences = (): Codec<Preferences> =>
buildCodecForObject<Preferences>()
.property("advanceOrderMode", codecForBoolean())
.property("advanceInstanceMode", codecForBoolean())
+ .property("developerMode", codecForBoolean())
.property("hideKycUntil", codecForAbsoluteTime)
.property("hideMissingAccountUntil", codecForAbsoluteTime)
.property(
diff --git a/packages/merchant-backoffice-ui/src/hooks/product.ts b/packages/merchant-backoffice-ui/src/hooks/product.ts
index defda5552..71b5e5045 100644
--- a/packages/merchant-backoffice-ui/src/hooks/product.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/product.ts
@@ -15,7 +15,15 @@
*/
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import { AccessToken, OperationOk, TalerHttpError, TalerMerchantApi, TalerMerchantManagementErrorsByMethod, TalerMerchantManagementResultByMethod, opFixedSuccess } from "@gnu-taler/taler-util";
+import {
+ AccessToken,
+ OperationOk,
+ TalerHttpError,
+ TalerMerchantApi,
+ TalerMerchantManagementErrorsByMethod,
+ TalerMerchantManagementResultByMethod,
+ opFixedSuccess,
+} from "@gnu-taler/taler-util";
import { useState } from "preact/hooks";
import _useSWR, { SWRHook, mutate } from "swr";
import { useSessionContext } from "../context/session.js";
@@ -23,7 +31,10 @@ import { PAGINATED_LIST_REQUEST } from "../utils/constants.js";
import { buildPaginatedResult } from "./webhooks.js";
const useSWR = _useSWR as unknown as SWRHook;
-type ProductWithId = TalerMerchantApi.ProductDetail & { id: string, serial: number };
+export type ProductWithId = TalerMerchantApi.ProductDetail & {
+ id: string;
+ serial: number;
+};
function notUndefined(c: ProductWithId | undefined): c is ProductWithId {
return c !== undefined;
}
@@ -36,15 +47,14 @@ export function revalidateInstanceProducts() {
);
}
export function useInstanceProducts() {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
const [offset, setOffset] = useState<number | undefined>();
async function fetcher([token, bid]: [AccessToken, number]) {
- const list = await instance.listProducts(token, {
+ const list = await lib.instance.listProducts(token, {
limit: PAGINATED_LIST_REQUEST,
- offset: bid === undefined ? undefined: String(bid),
+ offset: bid === undefined ? undefined : String(bid),
order: "dec",
});
if (list.type !== "ok") {
@@ -52,7 +62,7 @@ export function useInstanceProducts() {
}
const all: Array<ProductWithId | undefined> = await Promise.all(
list.body.products.map(async (c) => {
- const r = await instance.getProductDetails(token, c.product_id);
+ const r = await lib.instance.getProductDetails(token, c.product_id);
if (r.type === "fail") {
return undefined;
}
@@ -65,16 +75,21 @@ export function useInstanceProducts() {
}
const { data, error } = useSWR<
- OperationOk<{ products: ProductWithId[] }> |
- TalerMerchantManagementErrorsByMethod<"listProducts">,
+ | OperationOk<{ products: ProductWithId[] }>
+ | TalerMerchantManagementErrorsByMethod<"listProducts">,
TalerHttpError
- >([session.token, offset, "listProductsWithId"], fetcher);
+ >([state.token, offset, "listProductsWithId"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
if (data.type !== "ok") return data;
- return buildPaginatedResult(data.body.products, offset, setOffset, (d) => d.serial)
+ return buildPaginatedResult(
+ data.body.products,
+ offset,
+ setOffset,
+ (d) => d.serial,
+ );
}
export function revalidateProductDetails() {
@@ -85,17 +100,16 @@ export function revalidateProductDetails() {
);
}
export function useProductDetails(productId: string) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([pid, token]: [string, AccessToken]) {
- return await instance.getProductDetails(token, pid);
+ return await lib.instance.getProductDetails(token, pid);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getProductDetails">,
TalerHttpError
- >([productId, session.token, "getProductDetails"], fetcher);
+ >([productId, state.token, "getProductDetails"], fetcher);
if (data) return data;
if (error) return error;
diff --git a/packages/merchant-backoffice-ui/src/hooks/templates.ts b/packages/merchant-backoffice-ui/src/hooks/templates.ts
index 500a94a48..e4ee04f49 100644
--- a/packages/merchant-backoffice-ui/src/hooks/templates.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/templates.ts
@@ -20,7 +20,6 @@ import { PAGINATED_LIST_REQUEST } from "../utils/constants.js";
import { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook, mutate } from "swr";
import { useSessionContext } from "../context/session.js";
-import { buildPaginatedResult } from "./webhooks.js";
const useSWR = _useSWR as unknown as SWRHook;
@@ -35,13 +34,12 @@ export function revalidateInstanceTemplates() {
);
}
export function useInstanceTemplates() {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
- const [offset, setOffset] = useState<string | undefined>();
+ const [offset] = useState<string | undefined>();
async function fetcher([token, bid]: [AccessToken, string]) {
- return await instance.listTemplates(token, {
+ return await lib.instance.listTemplates(token, {
limit: PAGINATED_LIST_REQUEST,
offset: bid,
order: "dec",
@@ -51,7 +49,7 @@ export function useInstanceTemplates() {
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listTemplates">,
TalerHttpError
- >([session.token, offset, "listTemplates"], fetcher);
+ >([state.token, offset, "listTemplates"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
@@ -70,17 +68,16 @@ export function revalidateTemplateDetails() {
);
}
export function useTemplateDetails(templateId: string) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([tid, token]: [string, AccessToken]) {
- return await instance.getTemplateDetails(token, tid);
+ return await lib.instance.getTemplateDetails(token, tid);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getTemplateDetails">,
TalerHttpError
- >([templateId, session.token, "getTemplateDetails"], fetcher);
+ >([templateId, state.token, "getTemplateDetails"], fetcher);
if (data) return data;
if (error) return error;
diff --git a/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts b/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts
index 221babf30..67f8023f5 100644
--- a/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts
@@ -13,21 +13,27 @@
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { MerchantBackend } from "../declaration.js";
import { useSessionContext } from "../context/session.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import _useSWR, { SWRHook } from "swr";
-import { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from "@gnu-taler/taler-util";
+import { AccessToken, TalerHttpError, TalerMerchantApi, TalerMerchantManagementResultByMethod } from "@gnu-taler/taler-util";
+import _useSWR, { SWRHook, mutate } from "swr";
const useSWR = _useSWR as unknown as SWRHook;
+export function revalidateTokenFamilies() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "listTokenFamilies",
+ undefined,
+ { revalidate: true },
+ );
+}
export function useInstanceTokenFamilies() {
- const { state: session, lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
// const [offset, setOffset] = useState<number | undefined>();
- async function fetcher([token, bid]: [AccessToken, number]) {
- return await instance.listTokenFamilies(token, {
+ async function fetcher([token, _bid]: [AccessToken, number]) {
+ return await lib.instance.listTokenFamilies(token, {
// limit: PAGINATED_LIST_REQUEST,
// offset: bid === undefined ? undefined: String(bid),
// order: "dec",
@@ -37,7 +43,7 @@ export function useInstanceTokenFamilies() {
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listTokenFamilies">,
TalerHttpError
- >([session.token, "offset", "listTokenFamilies"], fetcher);
+ >([state.token, "offset", "listTokenFamilies"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
@@ -46,18 +52,24 @@ export function useInstanceTokenFamilies() {
return data;
}
+export function revalidateTokenFamilyDetails() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "getTokenFamilyDetails",
+ undefined,
+ { revalidate: true },
+ );
+}
export function useTokenFamilyDetails(tokenFamilySlug: string) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([slug, token]: [string, AccessToken]) {
- return await instance.getTokenFamilyDetails(token, slug);
+ return await lib.instance.getTokenFamilyDetails(token, slug);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getTokenFamilyDetails">,
TalerHttpError
- >([tokenFamilySlug, session.token, "getTokenFamilyDetails"], fetcher);
+ >([tokenFamilySlug, state.token, "getTokenFamilyDetails"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
@@ -68,11 +80,11 @@ export function useTokenFamilyDetails(tokenFamilySlug: string) {
export interface TokenFamilyAPI {
createTokenFamily: (
- data: MerchantBackend.TokenFamilies.TokenFamilyAddDetail,
+ data: TalerMerchantApi.TokenFamilyCreateRequest,
) => Promise<void>;
updateTokenFamily: (
slug: string,
- data: MerchantBackend.TokenFamilies.TokenFamilyPatchDetail,
+ data: TalerMerchantApi.TokenFamilyUpdateRequest,
) => Promise<void>;
deleteTokenFamily: (slug: string) => Promise<void>;
}
diff --git a/packages/merchant-backoffice-ui/src/hooks/transfer.ts b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
index 6f77369c2..02d91c496 100644
--- a/packages/merchant-backoffice-ui/src/hooks/transfer.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
@@ -39,13 +39,12 @@ export function useInstanceTransfers(
args?: InstanceTransferFilter,
updatePosition: (id: string | undefined) => void = (() => { }),
) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
// const [offset, setOffset] = useState<string | undefined>(args?.position);
async function fetcher([token, o, p, v]: [AccessToken, string, string, boolean]) {
- return await instance.listWireTransfers(token, {
+ return await lib.instance.listWireTransfers(token, {
paytoURI: p,
verified: v,
limit: PAGINATED_LIST_REQUEST,
@@ -57,7 +56,7 @@ export function useInstanceTransfers(
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listWireTransfers">,
TalerHttpError
- >([session.token, args?.position, args?.payto_uri, args?.verified, "listWireTransfers"], fetcher);
+ >([state.token, args?.position, args?.payto_uri, args?.verified, "listWireTransfers"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
diff --git a/packages/merchant-backoffice-ui/src/hooks/urls.ts b/packages/merchant-backoffice-ui/src/hooks/urls.ts
index 95e1c04f3..f24c4d49b 100644
--- a/packages/merchant-backoffice-ui/src/hooks/urls.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/urls.ts
@@ -40,10 +40,7 @@ export const API_GET_ORDER_BY_ID = (
url: `http://backend/instances/default/private/orders/${id}`,
});
-export const API_LIST_ORDERS: Query<
- unknown,
- TalerMerchantApi.OrderHistory
-> = {
+export const API_LIST_ORDERS: Query<unknown, TalerMerchantApi.OrderHistory> = {
method: "GET",
url: "http://backend/instances/default/private/orders",
};
@@ -76,13 +73,11 @@ export const API_DELETE_ORDER = (
// TRANSFER
////////////////////
-export const API_LIST_TRANSFERS: Query<
- unknown,
- TalerMerchantApi.TransferList
-> = {
- method: "GET",
- url: "http://backend/instances/default/private/transfers",
-};
+export const API_LIST_TRANSFERS: Query<unknown, TalerMerchantApi.TransferList> =
+ {
+ method: "GET",
+ url: "http://backend/instances/default/private/transfers",
+ };
export const API_INFORM_TRANSFERS: Query<
TalerMerchantApi.TransferInformation,
@@ -155,7 +150,7 @@ export const API_GET_INSTANCE_BY_ID = (
export const API_GET_INSTANCE_KYC_BY_ID = (
id: string,
-): Query<unknown, TalerMerchantApi.AccountKycRedirects> => ({
+): Query<unknown, TalerMerchantApi.MerchantAccountKycRedirectsResponse> => ({
method: "GET",
url: `http://backend/management/instances/${id}/kyc`,
});
@@ -170,20 +165,14 @@ export const API_LIST_INSTANCES: Query<
export const API_UPDATE_INSTANCE_BY_ID = (
id: string,
-): Query<
- TalerMerchantApi.InstanceReconfigurationMessage,
- unknown
-> => ({
+): Query<TalerMerchantApi.InstanceReconfigurationMessage, unknown> => ({
method: "PATCH",
url: `http://backend/management/instances/${id}`,
});
export const API_UPDATE_INSTANCE_AUTH_BY_ID = (
id: string,
-): Query<
- TalerMerchantApi.InstanceAuthConfigurationMessage,
- unknown
-> => ({
+): Query<TalerMerchantApi.InstanceAuthConfigurationMessage, unknown> => ({
method: "POST",
url: `http://backend/management/instances/${id}/auth`,
});
@@ -207,7 +196,7 @@ export const API_GET_CURRENT_INSTANCE: Query<
export const API_GET_CURRENT_INSTANCE_KYC: Query<
unknown,
- TalerMerchantApi.AccountKycRedirects
+ TalerMerchantApi.MerchantAccountKycRedirectsResponse
> = {
method: "GET",
url: `http://backend/instances/default/private/kyc`,
diff --git a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
index fe37162aa..3c3744b33 100644
--- a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts
@@ -32,13 +32,12 @@ export function revalidateInstanceWebhooks() {
);
}
export function useInstanceWebhooks() {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
// const [offset, setOffset] = useState<string | undefined>();
async function fetcher([token, _bid]: [AccessToken, string]) {
- return await instance.listWebhooks(token, {
+ return await lib.instance.listWebhooks(token, {
// limit: PAGINATED_LIST_REQUEST,
// offset: bid,
// order: "dec",
@@ -48,7 +47,7 @@ export function useInstanceWebhooks() {
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"listWebhooks">,
TalerHttpError
- >([session.token, "offset", "listWebhooks"], fetcher);
+ >([state.token, "offset", "listWebhooks"], fetcher);
if (error) return error;
if (data === undefined) return undefined;
@@ -100,17 +99,16 @@ export function revalidateWebhookDetails() {
);
}
export function useWebhookDetails(webhookId: string) {
- const { state: session } = useSessionContext();
- const { lib: { instance } } = useSessionContext();
+ const { state, lib } = useSessionContext();
async function fetcher([hookId, token]: [string, AccessToken]) {
- return await instance.getWebhookDetails(token, hookId);
+ return await lib.instance.getWebhookDetails(token, hookId);
}
const { data, error } = useSWR<
TalerMerchantManagementResultByMethod<"getWebhookDetails">,
TalerHttpError
- >([webhookId, session.token, "getWebhookDetails"], fetcher);
+ >([webhookId, state.token, "getWebhookDetails"], fetcher);
if (data) return data;
if (error) return error;
diff --git a/packages/merchant-backoffice-ui/src/i18n/de.po b/packages/merchant-backoffice-ui/src/i18n/de.po
index 66d654f64..a8d26721c 100644
--- a/packages/merchant-backoffice-ui/src/i18n/de.po
+++ b/packages/merchant-backoffice-ui/src/i18n/de.po
@@ -17,8 +17,8 @@ msgstr ""
"Project-Id-Version: Taler Wallet\n"
"Report-Msgid-Bugs-To: taler@gnu.org\n"
"POT-Creation-Date: 2016-11-23 00:00+0100\n"
-"PO-Revision-Date: 2024-05-07 14:32+0000\n"
-"Last-Translator: Stefan Kügel <skuegel@web.de>\n"
+"PO-Revision-Date: 2024-11-07 11:03+0000\n"
+"Last-Translator: Stefan Kügel <stefan.kuegel@taler.net>\n"
"Language-Team: German <https://weblate.taler.net/projects/gnu-taler/"
"merchant-backoffice/de/>\n"
"Language: de\n"
@@ -26,2719 +26,3844 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.4.3\n"
+"X-Generator: Weblate 5.5.5\n"
-#: src/components/modal/index.tsx:71
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr ""
+"Die Anfrage hat ihr Zeitlimit erreicht, überprüfen Sie bitte Ihre "
+"Internetverbindung."
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr "Die Anfrage wurde abgebrochen."
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+"Es wurden gleichzeitig zu viele Anfragen an denselben Server gestellt, daher "
+"ist diese Aktion zurückgestellt worden."
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr "Die Antwort auf die Anfrage wird nicht richtig dargestellt."
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr ""
+"Die Anfrage konnte aufgrund eines Netzwerkproblems nicht abgeschlossen "
+"werden."
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr "Unerwarteter Fehler bei der Anfrage."
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr "Unerwarteter Fehler."
+
+#: src/components/modal/index.tsx:81
#, c-format
msgid "Cancel"
-msgstr "Zurück"
+msgstr "Abbrechen"
-#: src/components/modal/index.tsx:79
+#: src/components/modal/index.tsx:89
#, c-format
msgid "%1$s"
msgstr "%1$s"
-#: src/components/modal/index.tsx:84
+#: src/components/modal/index.tsx:94
#, c-format
msgid "Close"
msgstr "Schließen"
-#: src/components/modal/index.tsx:124
+#: src/components/modal/index.tsx:134
#, c-format
msgid "Continue"
msgstr "Weiter"
-#: src/components/modal/index.tsx:178
+#: src/components/modal/index.tsx:194
#, c-format
msgid "Clear"
-msgstr ""
+msgstr "Leeren"
-#: src/components/modal/index.tsx:190
+#: src/components/modal/index.tsx:206
#, c-format
msgid "Confirm"
msgstr "Bestätigen"
-#: src/components/modal/index.tsx:296
+#: src/components/modal/index.tsx:248
+#, c-format
+msgid "Required"
+msgstr "Erforderlich"
+
+#: src/components/modal/index.tsx:250
+#, c-format
+msgid "Letter must be a JSON string"
+msgstr "Der Buchstabe muss eine JSON-Zeichenkette sein"
+
+#: src/components/modal/index.tsx:252
+#, c-format
+msgid "JSON string is invalid"
+msgstr "Die JSON-Zeichenkette ist ungültig"
+
+#: src/components/modal/index.tsx:257
+#, c-format
+msgid "Import"
+msgstr "Importieren"
+
+#: src/components/modal/index.tsx:258
+#, c-format
+msgid "Importing an account from the bank"
+msgstr "Ein Konto von der Bank importieren"
+
+#: src/components/modal/index.tsx:265
#, c-format
-msgid "is not the same as the current access token"
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
msgstr ""
+"Sie können Ihre Kontoeinstellungen aus dem Kontoprofil der Libeufin-Bank "
+"exportieren. Fügen Sie den Inhalt im nächsten Feld ein."
-#: src/components/modal/index.tsx:299
+#: src/components/modal/index.tsx:273
#, c-format
-msgid "cannot be empty"
-msgstr "darf nicht leer sein"
+msgid "Account information"
+msgstr "Kontoinformationen"
-#: src/components/modal/index.tsx:301
+#: src/components/modal/index.tsx:338
#, c-format
-msgid "cannot be the same as the old token"
-msgstr "muss sich vom alten Token unterscheiden"
+msgid "Correct form"
+msgstr "Korrektur der Angaben"
-#: src/components/modal/index.tsx:305
+#: src/components/modal/index.tsx:339
+#, c-format
+msgid "Comparing account details"
+msgstr "Vergleich der Kontodetails"
+
+#: src/components/modal/index.tsx:345
#, c-format
-msgid "is not the same"
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
msgstr ""
+"Die Prüfung der Kontoinformationen-URL war erfolgreich, aber die gemeldeten "
+"Kontoinformationen unterscheiden sich von der Kontodetails-Erfassung."
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr "Feld"
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr "Im Formular"
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr "Gemeldet"
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr "Typ"
-#: src/components/modal/index.tsx:315
+#: src/components/modal/index.tsx:376
#, c-format
-msgid "You are updating the access token from instance with id %1$s"
+msgid "IBAN"
+msgstr "IBAN"
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr "Adresse"
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr "Host"
+
+#: src/components/modal/index.tsx:402
+#, c-format
+msgid "Account id"
+msgstr "Konto-ID"
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr "Name des Eigentümers"
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr "Konto"
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
+msgstr "Server der Bank (Bank host)"
+
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr "Bankkonto"
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr "BIC"
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr "OK"
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr "Prüfung der Gültigkeit der Kontonummer: %1$s"
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
msgstr ""
+"Sie müssen eine Banküberweisung mit dem angegebenen Buchungsvermerk "
+"ausführen, um zu bestätigen, dass Sie der Eigentümer des Kontos sind."
-#: src/components/modal/index.tsx:331
+#: src/components/modal/index.tsx:487
#, c-format
-msgid "Old access token"
+msgid "Step 1:"
+msgstr "Schritt 1:"
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
msgstr ""
+"Kopieren Sie diese Zeichenkette und tragen sie als Buchungsvermerk in ihrer "
+"Banking-App oder Online-Banking-Webseite ein"
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr "Buchungsvermerk"
-#: src/components/modal/index.tsx:332
+#: src/components/modal/index.tsx:499
#, c-format
-msgid "access token currently in use"
+msgid "Step 2:"
+msgstr "Schritt 2:"
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
msgstr ""
+"Kopieren Sie diese IBAN und fügen Sie diese mit dem Namen des Begünstigten "
+"in die entsprechenden Felder Ihrer Banking-App oder Ihrer Online-Banking-"
+"Website ein"
-#: src/components/modal/index.tsx:338
+#: src/components/modal/index.tsx:509
#, c-format
-msgid "New access token"
+msgid "Receiver name"
+msgstr "Name des Begünstigten"
+
+#: src/components/modal/index.tsx:514
+#, c-format
+msgid "Step 3:"
+msgstr "Schritt 3:"
+
+#: src/components/modal/index.tsx:516
+#, c-format
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
msgstr ""
+"Überweisen Sie von Ihrer Bank-App oder Ihrem Online-Banking den "
+"kleinstmöglichen Betrag."
-#: src/components/modal/index.tsx:339
+#: src/components/modal/index.tsx:536
#, c-format
-msgid "next access token to be used"
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
msgstr ""
+"Vergewissern Sie sich, dass ALLE Daten und der Buchungsvermerk korrekt sind "
+"und Sie das richtige Bankkonto gewählt haben. Sie können die Daten "
+"übernehmen (%1$s), um Fehler durch eigenhändige Eingabe zu vermeiden, oder "
+"den \"payto://\" URI unten verwenden, um nur einen Wert zu kopieren."
-#: src/components/modal/index.tsx:344
+#: src/components/modal/index.tsx:549
#, c-format
-msgid "Repeat access token"
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
msgstr ""
+"Falls Ihre Bank den technischen Standard \"payto://\" URI erlaubt, können "
+"Sie alternativ dazu den Link %1$s verwenden"
-#: src/components/modal/index.tsx:345
+#: src/components/modal/index.tsx:694
#, c-format
-msgid "confirm the same access token"
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
msgstr ""
+"Wenn Sie die Instanz mit der Bezeichnung %1$s (ID: %2$s) löschen, wird der "
+"Verkäufer keine weiteren Bestellungen oder Rückerstattungen bearbeiten können"
-#: src/components/modal/index.tsx:350
+#: src/components/modal/index.tsx:701
#, c-format
-msgid "Clearing the access token will mean public access to the instance"
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
msgstr ""
+"Dieser Vorgang löscht den privaten Schlüssel der Instanz, sichert jedoch "
+"alle Transaktionsdaten. Sie können auch nach der Löschung der Instanz auf "
+"diese Daten weiterhin zugreifen."
-#: src/components/modal/index.tsx:377
+#: src/components/modal/index.tsx:708
#, c-format
-msgid "cannot be the same as the old access token"
+msgid "Deleting an instance %1$s ."
+msgstr "Löschung der Instanz %1$s ."
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
msgstr ""
+"Falls Sie die Instanz %1$s (ID: %2$s) vollständig verwerfen, löschen Sie "
+"damit auch unwiderruflich alle Transaktionsdaten."
-#: src/components/modal/index.tsx:394
+#: src/components/modal/index.tsx:743
#, c-format
-msgid "You are setting the access token for the new instance"
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
+msgstr ""
+"Die Instanz wird von Ihrer Liste gestrichen und alle ihre Daten werden nicht "
+"mehr zugänglich sein."
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr "Die Instanz %1$s wird endgültig verworfen."
+
+#: src/components/modal/index.tsx:786
+#, c-format
+msgid "Is not the same as the current access token"
+msgstr "ist ohne Übereinstimmung mit dem bisherigen Zugangstoken"
+
+#: src/components/modal/index.tsx:791
+#, c-format
+msgid "Can't be the same as the old token"
+msgstr "muss sich vom alten Zugangstoken unterscheiden"
+
+#: src/components/modal/index.tsx:795
+#, c-format
+msgid "Is not the same"
+msgstr "ungleich"
+
+#: src/components/modal/index.tsx:803
+#, c-format
+msgid "You are updating the access token for the instance with id %1$s"
+msgstr "Sie erneuern den Zugangstoken der Instanz mit der ID %1$s"
+
+#: src/components/modal/index.tsx:819
+#, c-format
+msgid "Old access token"
+msgstr "Alter Zugangstoken"
+
+#: src/components/modal/index.tsx:820
+#, c-format
+msgid "Access token currently in use"
+msgstr "Zugangstoken zurzeit in Verwendung"
+
+#: src/components/modal/index.tsx:826
+#, c-format
+msgid "New access token"
+msgstr "Neuer Zugangstoken"
+
+#: src/components/modal/index.tsx:827
+#, c-format
+msgid "Next access token to be used"
+msgstr "Folgender Zugangstoken für die zukünftige Verwendung"
+
+#: src/components/modal/index.tsx:832
+#, c-format
+msgid "Repeat access token"
+msgstr "Eingabe des Zugangstokens wiederholen"
+
+#: src/components/modal/index.tsx:833
+#, c-format
+msgid "Confirm the same access token"
+msgstr "Zugangstoken wiederholen"
+
+#: src/components/modal/index.tsx:838
+#, c-format
+msgid "Clearing the access token will mean public access to the instance"
msgstr ""
+"Den Zugangstoken zu löschen ermöglicht den freien Zugang zur Instanz für alle"
-#: src/components/modal/index.tsx:420
+#: src/components/modal/index.tsx:865
+#, c-format
+msgid "Can't be the same as the old access token"
+msgstr "Muss sich vom alten Zugangstoken unterscheiden"
+
+#: src/components/modal/index.tsx:880
+#, c-format
+msgid "You are setting the access token for the new instance"
+msgstr "Sie speichern den Zugangstoken für eine neue Instanz"
+
+#: src/components/modal/index.tsx:906
#, c-format
msgid ""
"With external authorization method no check will be done by the merchant "
"backend"
msgstr ""
+"Bei externen Verfahren der Berechtigungsprüfung erfolgt keine weitere "
+"Zugangsprüfung durch das Merchant-Backend"
-#: src/components/modal/index.tsx:436
+#: src/components/modal/index.tsx:922
#, c-format
msgid "Set external authorization"
-msgstr ""
+msgstr "Externe Zugangsberechtigung festlegen"
-#: src/components/modal/index.tsx:448
+#: src/components/modal/index.tsx:934
#, c-format
msgid "Set access token"
-msgstr ""
+msgstr "Zugangstoken festlegen"
-#: src/components/modal/index.tsx:470
+#: src/components/modal/index.tsx:956
#, c-format
msgid "Operation in progress..."
-msgstr ""
+msgstr "Die Verarbeitung ist im Gange..."
-#: src/components/modal/index.tsx:479
+#: src/components/modal/index.tsx:965
#, c-format
msgid "The operation will be automatically canceled after %1$s seconds"
-msgstr ""
+msgstr "Der Vorgang wird nach %1$s Sekunden automatisch abgebrochen"
+
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr "Ihr Passwort ist ungültig"
+
+#: src/paths/login/index.tsx:70
+#, c-format
+msgid "Your instance cannot be found"
+msgstr "Ihre Instanz kann nicht gefunden werden"
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr "Anmeldung erforderlich"
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr "Bitte geben Sie Ihren Zugangstoken für %1$s ein."
-#: src/paths/admin/list/TableActive.tsx:80
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr "Zugangstoken"
+
+#: src/paths/admin/list/TableActive.tsx:79
#, c-format
msgid "Instances"
-msgstr ""
+msgstr "Instanzen"
-#: src/paths/admin/list/TableActive.tsx:93
+#: src/paths/admin/list/TableActive.tsx:92
#, c-format
msgid "Delete"
-msgstr ""
+msgstr "Löschen"
-#: src/paths/admin/list/TableActive.tsx:99
+#: src/paths/admin/list/TableActive.tsx:98
#, c-format
-msgid "add new instance"
-msgstr ""
+msgid "Add new instance"
+msgstr "Neue Instanz hinzufügen"
-#: src/paths/admin/list/TableActive.tsx:178
+#: src/paths/admin/list/TableActive.tsx:175
#, c-format
msgid "ID"
-msgstr ""
+msgstr "ID"
-#: src/paths/admin/list/TableActive.tsx:181
+#: src/paths/admin/list/TableActive.tsx:178
#, c-format
msgid "Name"
-msgstr ""
+msgstr "Name"
#: src/paths/admin/list/TableActive.tsx:220
#, c-format
msgid "Edit"
-msgstr ""
+msgstr "Bearbeiten"
#: src/paths/admin/list/TableActive.tsx:237
#, c-format
msgid "Purge"
-msgstr ""
+msgstr "Vollständig verwerfen"
#: src/paths/admin/list/TableActive.tsx:261
#, c-format
-msgid "There is no instances yet, add more pressing the + sign"
+msgid "There are no instances yet, add more pressing the + sign"
msgstr ""
+"Es gibt noch keine Instanzen. Sie können diese mit dem +-Zeichen hinzufügen"
-#: src/paths/admin/list/View.tsx:68
+#: src/paths/admin/list/View.tsx:66
#, c-format
msgid "Only show active instances"
-msgstr ""
+msgstr "Zeige nur aktive Instanzen"
-#: src/paths/admin/list/View.tsx:71
+#: src/paths/admin/list/View.tsx:69
#, c-format
msgid "Active"
-msgstr ""
+msgstr "Aktiv"
-#: src/paths/admin/list/View.tsx:78
+#: src/paths/admin/list/View.tsx:76
#, c-format
msgid "Only show deleted instances"
-msgstr ""
+msgstr "Zeige nur gelöschte Instanzen"
-#: src/paths/admin/list/View.tsx:81
+#: src/paths/admin/list/View.tsx:79
#, c-format
msgid "Deleted"
-msgstr ""
+msgstr "Gelöscht"
-#: src/paths/admin/list/View.tsx:88
+#: src/paths/admin/list/View.tsx:86
#, c-format
msgid "Show all instances"
-msgstr ""
+msgstr "Zeige alle Instanzen"
-#: src/paths/admin/list/View.tsx:91
+#: src/paths/admin/list/View.tsx:89
#, c-format
msgid "All"
-msgstr ""
+msgstr "Alle"
-#: src/paths/admin/list/index.tsx:101
+#: src/paths/admin/list/index.tsx:100
#, c-format
msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
-msgstr ""
+msgstr "Instanz \"%1$s\" (ID: %2$s) wurde gelöscht"
-#: src/paths/admin/list/index.tsx:106
+#: src/paths/admin/list/index.tsx:105
#, c-format
msgid "Failed to delete instance"
-msgstr ""
+msgstr "Das Löschen der Instanz ist fehlgeschlagen"
-#: src/paths/admin/list/index.tsx:124
+#: src/paths/admin/list/index.tsx:140
#, c-format
-msgid "Instance '%1$s' (ID: %2$s) has been disabled"
-msgstr ""
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
+msgstr "Instanz '%1$s' (ID: %2$s) wurde vollständig gelöscht"
-#: src/paths/admin/list/index.tsx:129
+#: src/paths/admin/list/index.tsx:145
#, c-format
msgid "Failed to purge instance"
-msgstr ""
+msgstr "Die vollständige Löschung der Instanz ist fehlgeschlagen"
-#: src/paths/instance/kyc/list/ListPage.tsx:41
+#: src/components/exception/AsyncButton.tsx:43
#, c-format
-msgid "Pending KYC verification"
-msgstr ""
+msgid "Loading..."
+msgstr "Die Daten werden eingelesen..."
-#: src/paths/instance/kyc/list/ListPage.tsx:66
+#: src/components/form/InputPaytoForm.tsx:86
#, c-format
-msgid "Timed out"
-msgstr ""
+msgid "This is not a valid bitcoin address."
+msgstr "Dies ist keine zulässige Bitcoin-Adresse."
-#: src/paths/instance/kyc/list/ListPage.tsx:103
+#: src/components/form/InputPaytoForm.tsx:99
#, c-format
-msgid "Exchange"
-msgstr ""
+msgid "This is not a valid Ethereum address."
+msgstr "Dies ist keine zulässige Ethereum-Adresse."
-#: src/paths/instance/kyc/list/ListPage.tsx:106
+#: src/components/form/InputPaytoForm.tsx:128
#, c-format
-msgid "Target account"
-msgstr ""
+msgid "This is not a valid host."
+msgstr "Dies ist kein gültiger Host."
-#: src/paths/instance/kyc/list/ListPage.tsx:109
+#: src/components/form/InputPaytoForm.tsx:151
#, c-format
-msgid "KYC URL"
-msgstr ""
+msgid "IBAN numbers usually have more that 4 digits"
+msgstr "Eine IBAN besteht normalerweise aus mehr als 4 Ziffern"
-#: src/paths/instance/kyc/list/ListPage.tsx:144
+#: src/components/form/InputPaytoForm.tsx:153
+#, c-format
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr "Eine IBAN besteht normalerweise aus weniger als 34 Ziffern"
+
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr "IBAN-Ländercode wurde nicht gefunden"
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr "Die IBAN-Nummer ist ungültig, die Prüfsumme ist falsch"
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr "Bitte wählen Sie aus..."
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr "Verfahren, das für die Überweisung genutzt werden soll"
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr "Bankleitzahlensystem"
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr "Bankleitzahl."
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr "Kontonummer."
+
+#: src/components/form/InputPaytoForm.tsx:330
#, c-format
msgid "Code"
+msgstr "Code"
+
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr "Business Identifier Code. (BIC)."
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, c-format
+msgid "International Bank Account Number."
+msgstr "IBAN (Internationale Bankkontonummer)."
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr "Unified Payment Interface (UPI)."
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr "Bitcoin-Protokoll."
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr "Ethereum-Protokoll."
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr "Interledger-Protokoll."
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr "Bankenserver (Bank host)."
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr "Ohne Schema (kann einen Unterpfad enthalten):"
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr "Bankkonto."
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr "Rechtsgültiger Name des Kontoinhabers."
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr "Die Eingabe sollte mit dem Bankkontonamen übereinstimmen."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, c-format
+msgid "Invalid url"
+msgstr "ungültige URL"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr "Die URL muss mit '/' enden"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr "Die URL darf keine Parameter enthalten"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr "Die URL darf keinen Hash-Parameter enthalten"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr "Die Anfrage bei der Einzahlungs-Schnittstelle ist fehlgeschlagen."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr "Der Server antwortete mit \"bad request\"."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
msgstr ""
+"Unzulässiger Vorgang, bitte die Zugangsdaten (Token, Anmeldename, Passwort) "
+"überprüfen."
-#: src/paths/instance/kyc/list/ListPage.tsx:147
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
#, c-format
-msgid "Http Status"
+msgid "The endpoint does not seem to be a Taler Revenue API."
msgstr ""
+"Die Gegenstelle scheint keine Taler-Einzahlungsschnittstelle (Taler Revenue "
+"API) zu sein."
-#: src/paths/instance/kyc/list/ListPage.tsx:177
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
#, c-format
-msgid "No pending kyc verification!"
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
msgstr ""
+"Die Anfrage war richtig gestellt, doch der Server der Bank antwortete nicht "
+"mit dem passenden Wert (für 'credit_account'), so dass wir nicht bestätigen "
+"können, dass es sich um dasselbe Bankkonto handelt."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr "Konto:"
-#: src/components/form/InputDate.tsx:123
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
#, c-format
-msgid "change value to unknown date"
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
msgstr ""
+"Wenn die Bank die Taler-Einzahlungsschnittstelle unterstützt, können Sie die "
+"untenstehende Gegenstelle (endpoint URL) hinzufügen, um die "
+"Umsatzinformationen synchron zu halten."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr "Gegenstelle (endpoint URL)"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
+msgstr "Informationsquelle zu eingehenden Überweisungen auf dieses Bankkonto"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, c-format
+msgid "Auth type"
+msgstr "Authentifizierungstyp"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr "Wählen Sie den Authentifizierungstyp für die Kontoinformations-URL"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr "Ohne Authentifizierung"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr "Mit Passwort"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, c-format
+msgid "With token"
+msgstr "Mit Zugangstoken"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, c-format
+msgid "Do not change"
+msgstr "Lassen Sie dies unverändert"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr "Benutzername"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr "Benutzername für den Zugriff auf die Kontoinformationen."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr "Passwort"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr "Passwort für den Zugriff auf die Kontoinformationen."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr "Zugangstoken"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr "Zugangstoken für den Zugriff auf die Kontoinformationen."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr "Übereinstimmung"
-#: src/components/form/InputDate.tsx:124
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
#, c-format
-msgid "change value to empty"
+msgid "Check where the information match against the server info."
msgstr ""
+"Prüfung der Übereinstimmung dieser Information und der Daten auf dem Server."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, c-format
+msgid "Not verified"
+msgstr "Nicht überprüft"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr "Der letzte Test war erfolgreich"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr "Der letzte Test ist fehlgeschlagen"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr "Vergleich der Information des Servers mit den Bankkonto-Formulardaten"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr "Test"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr "Die gekennzeichneten Felder müssen ausgefüllt sein"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, c-format
+msgid "Confirm operation"
+msgstr "Vorgang bestätigen"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, c-format
+msgid "Account details"
+msgstr "Kontodetails"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr "Datenimport von der Bank"
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, c-format
+msgid "Could not create account"
+msgstr "Das Konto konnte nicht angelegt werden"
-#: src/components/form/InputDate.tsx:131
+#: src/paths/notfound/index.tsx:53
#, c-format
-msgid "clear"
+msgid "No 'default' instance configured yet."
+msgstr "Es wurde keine Standardinstanz konfiguriert."
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
msgstr ""
+"Erstellen Sie eine Standardinstanz, um das Merchant-Backend erstmalig zu "
+"verwenden."
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, c-format
+msgid "Bank accounts"
+msgstr "Bankkonten"
-#: src/components/form/InputDate.tsx:136
+#: src/paths/instance/accounts/list/Table.tsx:67
#, c-format
-msgid "change value to never"
+msgid "Add new account"
+msgstr "Neues Konto hinzufügen"
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, c-format
+msgid "Wire method: Bitcoin"
+msgstr "Überweisungsmethode: Bitcoin"
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr "SegWit 1"
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr "SegWit 2"
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, c-format
+msgid "Delete selected accounts from the database"
+msgstr "Löschen ausgewählter Konten von der Datenbank"
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, c-format
+msgid "Wire method: x-taler-bank"
+msgstr "Überweisungsmethode: x-taler-bank"
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, c-format
+msgid "Account name"
+msgstr "Kontenbezeichnung (z.B. Name)"
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, c-format
+msgid "Wire method: IBAN"
+msgstr "Überweisungsmethode: IBAN"
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, c-format
+msgid "Other accounts"
+msgstr "Andere Konten"
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr "Pfad"
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
msgstr ""
+"Es sind noch keine Konten angelegt, Sie können diese mit dem +-Zeichen "
+"hinzufügen"
-#: src/components/form/InputDate.tsx:141
+#: src/paths/instance/accounts/list/index.tsx:77
#, c-format
-msgid "never"
+msgid "You need to associate a bank account to receive revenue."
msgstr ""
+"Sie müssen ein Bankkonto verknüpfen, um Einnahmen aus Überweisungen auf "
+"dieses Konto zu erhalten."
-#: src/components/form/InputLocation.tsx:29
+#: src/paths/instance/accounts/list/index.tsx:78
#, c-format
-msgid "Country"
+msgid "Without this the you won't be able to create new orders."
+msgstr "Ohne dies können Sie keine neuen Bestellungen erstellen."
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr "Die Verknüpfung mit dem Bankkonto wurde erfolgreich gelöscht."
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr "Die Verknüpfung mit dem Bankkonto konnte nicht gelöscht werden"
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr "Das Konto konnte nicht aktualisiert werden"
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr "Die Kontoverbindung konnte nicht entfernt werden"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr "Ausstehende KYC-Prüfung"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr "Zahlungsdienstleister"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format
+msgid "Reason"
+msgstr "Buchungsvermerk"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
msgstr ""
+"Ausstehende KYC-Prüfung; klicken Sie hier, um den Vorgang abzuschließen"
-#: src/components/form/InputLocation.tsx:33
+#: src/paths/instance/kyc/list/ListPage.tsx:140
#, c-format
-msgid "Address"
+msgid "The exchange require a account verification."
msgstr ""
+"Der Zahlungsdienstleister verlangt die Bestätigung der Verfügbarkeit des "
+"Bankkontos."
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
+#, c-format
+msgid "Http Status"
+msgstr "HTTP-Status"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:199
+#, c-format
+msgid "No pending kyc verification!"
+msgstr "Eine KYC-Prüfung ist nicht (mehr) ausstehend!"
+
+#: src/components/form/InputDate.tsx:127
+#, c-format
+msgid "Change value to unknown date"
+msgstr "Wert auf unbekanntes Datum ändern"
+
+#: src/components/form/InputDate.tsx:128
+#, c-format
+msgid "Change value to empty"
+msgstr "Wert annullieren"
+
+#: src/components/form/InputDate.tsx:140
+#, c-format
+msgid "Change value to never"
+msgstr "Wert auf „nie“ setzen"
+
+#: src/components/form/InputDate.tsx:145
+#, c-format
+msgid "Never"
+msgstr "Nie"
+
+#: src/components/picker/DurationPicker.tsx:55
+#, c-format
+msgid "days"
+msgstr "Tage"
+
+#: src/components/picker/DurationPicker.tsx:65
+#, c-format
+msgid "hours"
+msgstr "Stunden"
+
+#: src/components/picker/DurationPicker.tsx:76
+#, c-format
+msgid "minutes"
+msgstr "Minuten"
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr "Sekunden"
+
+#: src/components/form/InputDuration.tsx:62
+#, c-format
+msgid "Forever"
+msgstr "Unbegrenzt"
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr "%1$sM"
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr "%1$sY"
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr "%1$sd"
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr "%1$sh"
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr "%1$smin"
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr "%1$ssec"
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
+msgstr "Land"
#: src/components/form/InputLocation.tsx:39
#, c-format
msgid "Building number"
-msgstr ""
+msgstr "Zusätzliche Adressangabe"
#: src/components/form/InputLocation.tsx:41
#, c-format
msgid "Building name"
-msgstr ""
+msgstr "Bezeichnung des Gebäudes"
#: src/components/form/InputLocation.tsx:42
#, c-format
msgid "Street"
-msgstr ""
+msgstr "Str."
#: src/components/form/InputLocation.tsx:43
#, c-format
msgid "Post code"
-msgstr ""
+msgstr "Postleitzahl"
#: src/components/form/InputLocation.tsx:44
#, c-format
msgid "Town location"
-msgstr ""
+msgstr "Ortsteil"
#: src/components/form/InputLocation.tsx:45
#, c-format
msgid "Town"
-msgstr ""
+msgstr "Ort"
#: src/components/form/InputLocation.tsx:46
#, c-format
msgid "District"
-msgstr ""
+msgstr "Bezirk/Kanton"
#: src/components/form/InputLocation.tsx:49
#, c-format
msgid "Country subdivision"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:66
-#, c-format
-msgid "Product id"
-msgstr ""
+msgstr "Region"
-#: src/components/form/InputSearchProduct.tsx:69
+#: src/components/form/InputSearchOnList.tsx:80
#, c-format
msgid "Description"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:94
-#, c-format
-msgid "Product"
-msgstr ""
+msgstr "Bezeichnung"
-#: src/components/form/InputSearchProduct.tsx:95
+#: src/components/form/InputSearchOnList.tsx:106
#, c-format
-msgid "search products by it's description or id"
-msgstr ""
+msgid "Enter description or id"
+msgstr "Bezeichnung oder ID eingeben"
-#: src/components/form/InputSearchProduct.tsx:151
+#: src/components/form/InputSearchOnList.tsx:164
#, c-format
-msgid "no products found with that description"
-msgstr ""
+msgid "no match found with that description or id"
+msgstr "Für diese Bezeichnung oder ID wurde nichts gefunden"
-#: src/components/product/InventoryProductForm.tsx:56
+#: src/components/product/InventoryProductForm.tsx:57
#, c-format
msgid "You must enter a valid product identifier."
-msgstr ""
+msgstr "Sie müssen eine gültige Artikelkennung eingeben."
-#: src/components/product/InventoryProductForm.tsx:64
+#: src/components/product/InventoryProductForm.tsx:65
#, c-format
msgid "Quantity must be greater than 0!"
-msgstr ""
+msgstr "Die Menge muss größer als 0 sein!"
-#: src/components/product/InventoryProductForm.tsx:76
+#: src/components/product/InventoryProductForm.tsx:77
#, c-format
msgid ""
"This quantity exceeds remaining stock. Currently, only %1$s units remain "
"unreserved in stock."
msgstr ""
+"Diese Menge überschreitet den Bestand. Momentan sind nur %1$s Stück im "
+"Inventar ohne Vorbestellung."
-#: src/components/product/InventoryProductForm.tsx:109
+#: src/components/product/InventoryProductForm.tsx:100
+#, c-format
+msgid "Search product"
+msgstr "Artikel suchen"
+
+#: src/components/product/InventoryProductForm.tsx:112
#, c-format
msgid "Quantity"
-msgstr ""
+msgstr "Menge"
-#: src/components/product/InventoryProductForm.tsx:110
+#: src/components/product/InventoryProductForm.tsx:113
#, c-format
-msgid "how many products will be added"
-msgstr ""
+msgid "How many products will be added"
+msgstr "Wie viele Artikel hinzugefügt werden"
-#: src/components/product/InventoryProductForm.tsx:117
+#: src/components/product/InventoryProductForm.tsx:120
#, c-format
msgid "Add from inventory"
-msgstr ""
+msgstr "Vom Bestand hinzufügen"
-#: src/components/form/InputImage.tsx:105
+#: src/components/form/InputImage.tsx:107
#, c-format
-msgid "Image should be smaller than 1 MB"
-msgstr ""
+msgid "Image must be smaller than 1 MB"
+msgstr "Die Bilddatei muss kleiner als 1 MB sein"
-#: src/components/form/InputImage.tsx:110
+#: src/components/form/InputImage.tsx:112
#, c-format
msgid "Add"
-msgstr ""
+msgstr "Hinzufügen"
-#: src/components/form/InputImage.tsx:115
+#: src/components/form/InputImage.tsx:122
#, c-format
msgid "Remove"
-msgstr ""
+msgstr "Entfernen"
+
+#: src/components/form/InputTaxes.tsx:47
+#, c-format
+msgid "Invalid"
+msgstr "Ungültig"
-#: src/components/form/InputTaxes.tsx:113
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr "Für diesen Artikel ist ein Steuersatz von %1$s angelegt."
+
+#: src/components/form/InputTaxes.tsx:103
#, c-format
msgid "No taxes configured for this product."
-msgstr ""
+msgstr "Für diesen Artikel sind keine Steuern angelegt."
-#: src/components/form/InputTaxes.tsx:119
+#: src/components/form/InputTaxes.tsx:109
#, c-format
msgid "Amount"
msgstr "Betrag"
-#: src/components/form/InputTaxes.tsx:120
+#: src/components/form/InputTaxes.tsx:110
#, c-format
msgid ""
"Taxes can be in currencies that differ from the main currency used by the "
"merchant."
msgstr ""
+"Steuern können in einer anderen Währung sein als die Hauptwährung, welche "
+"für Verkäufe normalerweise verwendet wird."
-#: src/components/form/InputTaxes.tsx:122
+#: src/components/form/InputTaxes.tsx:112
#, c-format
msgid ""
"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
msgstr ""
+"Geben Sie Währung und Betrag mit einem Doppelpunkt getrennt ein, z.B. &quot;"
+"EUR:2,3&quot;."
-#: src/components/form/InputTaxes.tsx:131
+#: src/components/form/InputTaxes.tsx:121
#, c-format
msgid "Legal name of the tax, e.g. VAT or import duties."
msgstr ""
+"Offizielle Bezeichnung der Steuer, z.B. Mehrwertsteuer oder Einfuhrsteuer."
-#: src/components/form/InputTaxes.tsx:137
+#: src/components/form/InputTaxes.tsx:127
#, c-format
-msgid "add tax to the tax list"
-msgstr ""
+msgid "Add tax to the tax list"
+msgstr "Steuersatz zur Liste der Steuern hinzufügen"
-#: src/components/product/NonInventoryProductForm.tsx:72
+#: src/components/product/NonInventoryProductForm.tsx:71
#, c-format
-msgid "describe and add a product that is not in the inventory list"
-msgstr ""
+msgid "Describe and add a product that is not in the inventory list"
+msgstr "Bisher nicht inventarisierte Artikel beschreiben und hinzufügen"
-#: src/components/product/NonInventoryProductForm.tsx:75
+#: src/components/product/NonInventoryProductForm.tsx:74
#, c-format
msgid "Add custom product"
-msgstr ""
+msgstr "Individuellen Artikel hinzufügen"
-#: src/components/product/NonInventoryProductForm.tsx:86
+#: src/components/product/NonInventoryProductForm.tsx:85
#, c-format
msgid "Complete information of the product"
-msgstr ""
+msgstr "Informationen zum Artikel vervollständigen"
+
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, c-format
+msgid "Must be a number"
+msgstr "Dieser Wert muss eine Nummer sein"
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, c-format
+msgid "Must be grater than 0"
+msgstr "Dieser Wert muss größer als Null sein"
#: src/components/product/NonInventoryProductForm.tsx:185
#, c-format
msgid "Image"
-msgstr ""
+msgstr "Bild"
#: src/components/product/NonInventoryProductForm.tsx:186
#, c-format
-msgid "photo of the product"
-msgstr ""
+msgid "Photo of the product."
+msgstr "Abbildung des Artikels."
#: src/components/product/NonInventoryProductForm.tsx:192
#, c-format
-msgid "full product description"
-msgstr ""
+msgid "Full product description."
+msgstr "Vollständige Artikelbeschreibung."
#: src/components/product/NonInventoryProductForm.tsx:196
#, c-format
msgid "Unit"
-msgstr ""
+msgstr "Einheit"
#: src/components/product/NonInventoryProductForm.tsx:197
#, c-format
-msgid "name of the product unit"
-msgstr ""
+msgid "Name of the product unit."
+msgstr "Artikelname (Bezeichnung einer Einheit)."
#: src/components/product/NonInventoryProductForm.tsx:201
#, c-format
msgid "Price"
-msgstr ""
+msgstr "Preis"
#: src/components/product/NonInventoryProductForm.tsx:202
#, c-format
-msgid "amount in the current currency"
-msgstr ""
+msgid "Amount in the current currency."
+msgstr "Betrag in der aktuellen Währung."
+
+#: src/components/product/NonInventoryProductForm.tsx:208
+#, c-format
+msgid "How many products will be added."
+msgstr "Wie viele Artikel hinzugefügt werden."
#: src/components/product/NonInventoryProductForm.tsx:211
#, c-format
msgid "Taxes"
-msgstr ""
+msgstr "Steuern"
-#: src/components/product/ProductList.tsx:38
+#: src/components/product/ProductList.tsx:46
#, c-format
-msgid "image"
-msgstr ""
+msgid "Unit price"
+msgstr "Preis einer Einheit"
-#: src/components/product/ProductList.tsx:41
+#: src/components/product/ProductList.tsx:49
#, c-format
-msgid "description"
-msgstr ""
+msgid "Total price"
+msgstr "Gesamtpreis"
-#: src/components/product/ProductList.tsx:44
+#: src/paths/instance/orders/create/CreatePage.tsx:162
#, c-format
-msgid "quantity"
-msgstr ""
+msgid "Must be greater than 0"
+msgstr "Dieser Wert muss größer als Null sein"
-#: src/components/product/ProductList.tsx:47
+#: src/paths/instance/orders/create/CreatePage.tsx:173
#, c-format
-msgid "unit price"
-msgstr ""
+msgid "Refund deadline can't be before pay deadline"
+msgstr "Die Rückerstattungsfrist kann nicht vor der Zahlungsfrist liegen"
-#: src/components/product/ProductList.tsx:50
+#: src/paths/instance/orders/create/CreatePage.tsx:179
#, c-format
-msgid "total price"
+msgid "Wire transfer deadline can't be before refund deadline"
msgstr ""
+"Der Zeitraum der Überweisung kann nicht vor Ablauf der Rückerstattungsfrist "
+"enden"
-#: src/paths/instance/orders/create/CreatePage.tsx:153
+#: src/paths/instance/orders/create/CreatePage.tsx:188
#, c-format
-msgid "required"
-msgstr ""
+msgid "Wire transfer deadline can't be before pay deadline"
+msgstr "Die Überweisungsfrist kann nicht vor der Zahlungsfrist liegen"
-#: src/paths/instance/orders/create/CreatePage.tsx:157
+#: src/paths/instance/orders/create/CreatePage.tsx:196
#, c-format
-msgid "not valid"
-msgstr ""
+msgid "Must have a refund deadline"
+msgstr "Es sollte eine Rückerstattungsfrist geben"
-#: src/paths/instance/orders/create/CreatePage.tsx:159
+#: src/paths/instance/orders/create/CreatePage.tsx:201
#, c-format
-msgid "must be greater than 0"
+msgid "Auto refund can't be after refund deadline"
msgstr ""
+"Eine automatische Rückerstattung kann nicht nach der Rückerstattungsfrist "
+"erfolgen"
-#: src/paths/instance/orders/create/CreatePage.tsx:164
-#, c-format
-msgid "not a valid json"
-msgstr "kein gültiges JSON-Format"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:170
-#, c-format
-msgid "should be in the future"
-msgstr "sollte in der Zukunft liegen"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:173
-#, c-format
-msgid "refund deadline cannot be before pay deadline"
-msgstr "Die Rückerstattungsfrist kann nicht vor der Zahlungsfrist liegen"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:179
-#, c-format
-msgid "wire transfer deadline cannot be before refund deadline"
-msgstr "Die Überweisungsfrist kann nicht vor der Rückerstattungsfrist liegen"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:190
+#: src/paths/instance/orders/create/CreatePage.tsx:208
#, c-format
-msgid "wire transfer deadline cannot be before pay deadline"
-msgstr "Die Überweisungsfrist kann nicht vor der Zahlungsfrist liegen"
+msgid "Must be in the future"
+msgstr "Dieser Wert sollte in der Zukunft liegen"
-#: src/paths/instance/orders/create/CreatePage.tsx:197
+#: src/paths/instance/orders/create/CreatePage.tsx:376
#, c-format
-msgid "should have a refund deadline"
-msgstr "sollte eine Rückerstattungsfrist haben"
+msgid "Simple"
+msgstr "Einfach"
-#: src/paths/instance/orders/create/CreatePage.tsx:202
+#: src/paths/instance/orders/create/CreatePage.tsx:388
#, c-format
-msgid "auto refund cannot be after refund deadline"
-msgstr ""
-"Die automatische Rückerstattung kann nicht nach der Rückerstattungsfrist "
-"erfolgen"
+msgid "Advanced"
+msgstr "Erweitert"
-#: src/paths/instance/orders/create/CreatePage.tsx:360
+#: src/paths/instance/orders/create/CreatePage.tsx:400
#, c-format
msgid "Manage products in order"
msgstr "Artikel in der Bestellung verwalten"
-#: src/paths/instance/orders/create/CreatePage.tsx:369
+#: src/paths/instance/orders/create/CreatePage.tsx:404
+#, c-format
+msgid "%1$s products with a total price of %2$s."
+msgstr "%1$s Artikel zu einer Gesamtsumme von %2$s."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:411
#, c-format
msgid "Manage list of products in the order."
msgstr "Liste der Artikel in der Bestellung verwalten."
-#: src/paths/instance/orders/create/CreatePage.tsx:391
+#: src/paths/instance/orders/create/CreatePage.tsx:435
#, c-format
msgid "Remove this product from the order."
msgstr "Diesen Artikel aus der Bestellung entfernen."
-#: src/paths/instance/orders/create/CreatePage.tsx:415
-#, c-format
-msgid "Total price"
-msgstr "Gesamtpreis"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:417
+#: src/paths/instance/orders/create/CreatePage.tsx:461
#, c-format
-msgid "total product price added up"
-msgstr ""
+msgid "Total product price added up"
+msgstr "Gesamtpreis des Artikels hinzugerechnet"
-#: src/paths/instance/orders/create/CreatePage.tsx:430
+#: src/paths/instance/orders/create/CreatePage.tsx:474
#, c-format
msgid "Amount to be paid by the customer"
-msgstr "Zu zahlender Betrag"
+msgstr "Vom Kunden zu zahlender Betrag"
-#: src/paths/instance/orders/create/CreatePage.tsx:436
+#: src/paths/instance/orders/create/CreatePage.tsx:480
#, c-format
msgid "Order price"
msgstr "Bestellsumme"
-#: src/paths/instance/orders/create/CreatePage.tsx:437
+#: src/paths/instance/orders/create/CreatePage.tsx:481
#, c-format
-msgid "final order price"
-msgstr ""
+msgid "Final order price"
+msgstr "Endgültiger Bestellwert"
-#: src/paths/instance/orders/create/CreatePage.tsx:444
+#: src/paths/instance/orders/create/CreatePage.tsx:488
#, c-format
msgid "Summary"
msgstr "Zusammenfassung"
-#: src/paths/instance/orders/create/CreatePage.tsx:445
+#: src/paths/instance/orders/create/CreatePage.tsx:489
#, c-format
msgid "Title of the order to be shown to the customer"
msgstr "Bezeichnung der Bestellung, die den Kunden angezeigt wird"
-#: src/paths/instance/orders/create/CreatePage.tsx:450
+#: src/paths/instance/orders/create/CreatePage.tsx:495
#, c-format
-msgid "Shipping and Fulfillment"
-msgstr ""
+msgid "Shipping and fulfillment"
+msgstr "Versand und Lieferung"
-#: src/paths/instance/orders/create/CreatePage.tsx:455
+#: src/paths/instance/orders/create/CreatePage.tsx:500
#, c-format
msgid "Delivery date"
msgstr "Lieferdatum"
-#: src/paths/instance/orders/create/CreatePage.tsx:456
+#: src/paths/instance/orders/create/CreatePage.tsx:501
#, c-format
msgid "Deadline for physical delivery assured by the merchant."
msgstr "Vom Händler zugesicherte Zustellfrist."
-#: src/paths/instance/orders/create/CreatePage.tsx:461
+#: src/paths/instance/orders/create/CreatePage.tsx:506
#, c-format
msgid "Location"
-msgstr ""
+msgstr "Lieferadresse"
-#: src/paths/instance/orders/create/CreatePage.tsx:462
+#: src/paths/instance/orders/create/CreatePage.tsx:507
#, c-format
-msgid "address where the products will be delivered"
+msgid "Address where the products will be delivered"
msgstr "Zustelladresse der Artikel"
-#: src/paths/instance/orders/create/CreatePage.tsx:469
+#: src/paths/instance/orders/create/CreatePage.tsx:514
#, c-format
msgid "Fulfillment URL"
msgstr "Adresse digitaler Dienstleistung (Fulfillment-URL)"
-#: src/paths/instance/orders/create/CreatePage.tsx:470
+#: src/paths/instance/orders/create/CreatePage.tsx:515
#, c-format
msgid "URL to which the user will be redirected after successful payment."
msgstr "URL der von Kunden zu besuchenden Adresse nach erfolgter Bezahlung."
-#: src/paths/instance/orders/create/CreatePage.tsx:476
+#: src/paths/instance/orders/create/CreatePage.tsx:523
#, c-format
msgid "Taler payment options"
msgstr "Taler-Zahlungsoptionen"
-#: src/paths/instance/orders/create/CreatePage.tsx:477
+#: src/paths/instance/orders/create/CreatePage.tsx:524
#, c-format
msgid "Override default Taler payment settings for this order"
msgstr ""
+"Überschreibe die vorgegebenen Zahlungseinstellungen im Taler-System für "
+"diese Bestellung"
-#: src/paths/instance/orders/create/CreatePage.tsx:481
+#: src/paths/instance/orders/create/CreatePage.tsx:529
#, c-format
-msgid "Payment deadline"
-msgstr "Zahlungsfrist"
+msgid "Payment time"
+msgstr "Zahlungsdatum"
-#: src/paths/instance/orders/create/CreatePage.tsx:482
+#: src/paths/instance/orders/create/CreatePage.tsx:535
#, c-format
msgid ""
-"Deadline for the customer to pay for the offer before it expires. Inventory "
-"products will be reserved until this deadline."
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
msgstr ""
+"Zeitdauer, die Käufer haben, um das Angebot zu bezahlen, bevor es verfällt. "
+"Inventarisierte Artikel für das Angebot werden bis zum Fristablauf "
+"reserviert. Die Zeitdauer beginnt mit der Erstellzeit der Bestellungen."
-#: src/paths/instance/orders/create/CreatePage.tsx:486
+#: src/paths/instance/orders/create/CreatePage.tsx:552
#, c-format
-msgid "Refund deadline"
-msgstr ""
+msgid "Default"
+msgstr "Standardeinstellung"
-#: src/paths/instance/orders/create/CreatePage.tsx:487
+#: src/paths/instance/orders/create/CreatePage.tsx:561
#, c-format
-msgid "Time until which the order can be refunded by the merchant."
-msgstr ""
+msgid "Refund time"
+msgstr "Rückerstattungsdatum"
-#: src/paths/instance/orders/create/CreatePage.tsx:491
-#, c-format
-msgid "Wire transfer deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:492
-#, c-format
-msgid "Deadline for the exchange to make the wire transfer."
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:496
-#, c-format
-msgid "Auto-refund deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:497
+#: src/paths/instance/orders/create/CreatePage.tsx:569
#, c-format
msgid ""
-"Time until which the wallet will automatically check for refunds without "
-"user interaction."
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
msgstr ""
+"Zeitdauer, in der die Bestellung vom Verkäufer erstattet werden kann. Die "
+"Zeitdauer beginnt mit der Erstellzeit der Bestellungen."
-#: src/paths/instance/orders/create/CreatePage.tsx:502
+#: src/paths/instance/orders/create/CreatePage.tsx:594
#, c-format
-msgid "Maximum deposit fee"
-msgstr ""
+msgid "Wire transfer time"
+msgstr "Zeitdauer der Überweisungen"
-#: src/paths/instance/orders/create/CreatePage.tsx:503
+#: src/paths/instance/orders/create/CreatePage.tsx:602
#, c-format
msgid ""
-"Maximum deposit fees the merchant is willing to cover for this order. Higher "
-"deposit fees must be covered in full by the consumer."
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
msgstr ""
+"Zeitdauer, in welcher der Zahlungsdienstleister Überweisungen ausführt. Die "
+"Zeitdauer beginnt mit der Erstellzeit der Bestellungen."
-#: src/paths/instance/orders/create/CreatePage.tsx:507
+#: src/paths/instance/orders/create/CreatePage.tsx:628
#, c-format
-msgid "Maximum wire fee"
-msgstr ""
+msgid "Auto-refund time"
+msgstr "Zeitdauer für automatische Rückerstattungen"
-#: src/paths/instance/orders/create/CreatePage.tsx:508
+#: src/paths/instance/orders/create/CreatePage.tsx:634
#, c-format
msgid ""
-"Maximum aggregate wire fees the merchant is willing to cover for this order. "
-"Wire fees exceeding this amount are to be covered by the customers."
+"Time until which the wallet will automatically check for refunds without "
+"user interaction."
msgstr ""
+"Zeit, bis zu der das Wallet automatisch und ohne Benutzerinteraktion auf "
+"Rückerstattungen prüft."
-#: src/paths/instance/orders/create/CreatePage.tsx:512
+#: src/paths/instance/orders/create/CreatePage.tsx:642
#, c-format
-msgid "Wire fee amortization"
-msgstr ""
+msgid "Maximum fee"
+msgstr "Maximale Gebührenhöhe"
-#: src/paths/instance/orders/create/CreatePage.tsx:513
+#: src/paths/instance/orders/create/CreatePage.tsx:643
#, c-format
msgid ""
-"Factor by which wire fees exceeding the above threshold are divided to "
-"determine the share of excess wire fees to be paid explicitly by the "
-"consumer."
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
msgstr ""
+"Die maximale Gebührenhöhe, die ein Verkäufer für eine Bestellung zu "
+"übernehmen gewillt ist. Einlösegebühren, die über dieser liegen, sind "
+"komplett von den Käufern zu übernehmen."
-#: src/paths/instance/orders/create/CreatePage.tsx:517
+#: src/paths/instance/orders/create/CreatePage.tsx:649
#, c-format
msgid "Create token"
-msgstr ""
+msgstr "Token erzeugen"
-#: src/paths/instance/orders/create/CreatePage.tsx:518
+#: src/paths/instance/orders/create/CreatePage.tsx:650
#, c-format
msgid ""
-"Uncheck this option if the merchant backend generated an order ID with "
-"enough entropy to prevent adversarial claims."
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
msgstr ""
+"Wenn die ID der Bestellung leicht zu erraten ist, verhindert der Token, dass "
+"Benutzer Bestellungen von anderen „stehlen“ können."
-#: src/paths/instance/orders/create/CreatePage.tsx:522
+#: src/paths/instance/orders/create/CreatePage.tsx:656
#, c-format
msgid "Minimum age required"
-msgstr ""
+msgstr "Mindestalter erforderlich"
-#: src/paths/instance/orders/create/CreatePage.tsx:523
+#: src/paths/instance/orders/create/CreatePage.tsx:657
#, c-format
msgid ""
"Any value greater than 0 will limit the coins able be used to pay this "
"contract. If empty the age restriction will be defined by the products"
msgstr ""
+"Eine Zahl größer als 0 schränkt ein, welches e-Geld zur Bezahlung dieses "
+"Kaufvertrags verwendet werden kann. Bleibt das Feld leer, werden "
+"Altersbeschränkungen durch die Artikel selbst festgelegt"
-#: src/paths/instance/orders/create/CreatePage.tsx:526
+#: src/paths/instance/orders/create/CreatePage.tsx:660
#, c-format
msgid "Min age defined by the producs is %1$s"
+msgstr "Das Mindestalter für diesen Artikel ist %1$s"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:661
+#, c-format
+msgid "No product with age restriction in this order"
msgstr ""
+"Es befindet sich kein Artikel mit einer Altersbeschränkung in dieser "
+"Bestellung"
-#: src/paths/instance/orders/create/CreatePage.tsx:534
+#: src/paths/instance/orders/create/CreatePage.tsx:671
#, c-format
msgid "Additional information"
-msgstr ""
+msgstr "Zusätzliche Informationen"
-#: src/paths/instance/orders/create/CreatePage.tsx:535
+#: src/paths/instance/orders/create/CreatePage.tsx:672
#, c-format
msgid "Custom information to be included in the contract for this order."
msgstr ""
+"Individuelle Informationen, die in den Kaufvertrag für diese Bestellung "
+"aufgenommen werden sollen."
-#: src/paths/instance/orders/create/CreatePage.tsx:541
+#: src/paths/instance/orders/create/CreatePage.tsx:681
#, c-format
msgid "You must enter a value in JavaScript Object Notation (JSON)."
msgstr ""
+"Sie müssen einen Wert im Format JavaScript Object Notation (JSON) eingeben."
-#: src/components/picker/DurationPicker.tsx:55
+#: src/paths/instance/orders/create/CreatePage.tsx:707
#, c-format
-msgid "days"
-msgstr ""
+msgid "Custom field name"
+msgstr "Benutzerdefinierter Feldname"
-#: src/components/picker/DurationPicker.tsx:65
+#: src/paths/instance/orders/create/CreatePage.tsx:793
#, c-format
-msgid "hours"
-msgstr ""
-
-#: src/components/picker/DurationPicker.tsx:76
-#, c-format
-msgid "minutes"
-msgstr ""
-
-#: src/components/picker/DurationPicker.tsx:87
-#, c-format
-msgid "seconds"
-msgstr ""
-
-#: src/components/form/InputDuration.tsx:53
-#, c-format
-msgid "forever"
-msgstr ""
-
-#: src/components/form/InputDuration.tsx:62
-#, c-format
-msgid "%1$sM"
-msgstr ""
+msgid "Disabled"
+msgstr "Deaktiviert"
-#: src/components/form/InputDuration.tsx:64
+#: src/paths/instance/orders/create/CreatePage.tsx:796
#, c-format
-msgid "%1$sY"
-msgstr ""
+msgid "No deadline"
+msgstr "Keine Zahlungsfrist"
-#: src/components/form/InputDuration.tsx:66
+#: src/paths/instance/orders/create/CreatePage.tsx:797
#, c-format
-msgid "%1$sd"
-msgstr ""
+msgid "Deadline at %1$s"
+msgstr "Frist bis %1$s"
-#: src/components/form/InputDuration.tsx:68
+#: src/paths/instance/orders/create/index.tsx:109
#, c-format
-msgid "%1$sh"
-msgstr ""
+msgid "Could not create order"
+msgstr "Es war nicht möglich, eine Bestellung anzulegen"
-#: src/components/form/InputDuration.tsx:70
+#: src/paths/instance/orders/create/index.tsx:111
#, c-format
-msgid "%1$smin"
+msgid "No exchange would accept a payment because of KYC requirements."
msgstr ""
+"Aufgrund vorgegebener KYC-Erfordernisse würde kein Zahlungsdienstleister "
+"eine Zahlung annehmen."
-#: src/components/form/InputDuration.tsx:72
+#: src/paths/instance/orders/create/index.tsx:129
#, c-format
-msgid "%1$ssec"
-msgstr ""
+msgid "No more stock for product with ID \"%1$s\"."
+msgstr "Es gibt keinen Bestand für den Artikel mit der ID \"%1$s\"."
#: src/paths/instance/orders/list/Table.tsx:75
#, c-format
msgid "Orders"
-msgstr ""
+msgstr "Bestellungen"
#: src/paths/instance/orders/list/Table.tsx:81
#, c-format
-msgid "create order"
-msgstr ""
+msgid "Create order"
+msgstr "Bestellung anlegen"
-#: src/paths/instance/orders/list/Table.tsx:147
+#: src/paths/instance/orders/list/Table.tsx:138
#, c-format
-msgid "load newer orders"
-msgstr ""
+msgid "Load first page"
+msgstr "Erste Seite laden"
-#: src/paths/instance/orders/list/Table.tsx:154
+#: src/paths/instance/orders/list/Table.tsx:145
#, c-format
msgid "Date"
msgstr "Datum"
-#: src/paths/instance/orders/list/Table.tsx:200
+#: src/paths/instance/orders/list/Table.tsx:191
#, c-format
msgid "Refund"
-msgstr ""
+msgstr "Rückerstattung"
-#: src/paths/instance/orders/list/Table.tsx:209
+#: src/paths/instance/orders/list/Table.tsx:200
#, c-format
msgid "copy url"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:225
-#, c-format
-msgid "load older orders"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:242
-#, c-format
-msgid "No orders have been found matching your query!"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:288
-#, c-format
-msgid "duplicated"
-msgstr ""
+msgstr "URL kopieren"
-#: src/paths/instance/orders/list/Table.tsx:299
+#: src/paths/instance/orders/list/Table.tsx:213
#, c-format
-msgid "invalid format"
-msgstr ""
+msgid "Load more orders after the last one"
+msgstr "Weitere Bestellungen nach der letzten Bestellung laden"
-#: src/paths/instance/orders/list/Table.tsx:301
+#: src/paths/instance/orders/list/Table.tsx:216
#, c-format
-msgid "this value exceed the refundable amount"
-msgstr ""
+msgid "Load next page"
+msgstr "Nächste Seite laden"
-#: src/paths/instance/orders/list/Table.tsx:346
+#: src/paths/instance/orders/list/Table.tsx:233
#, c-format
-msgid "date"
-msgstr ""
+msgid "No orders have been found matching your query!"
+msgstr "Es wurden keine Bestellungen gefunden, die zu Ihrer Abfrage passen!"
-#: src/paths/instance/orders/list/Table.tsx:349
+#: src/paths/instance/orders/list/Table.tsx:280
#, c-format
-msgid "amount"
-msgstr ""
+msgid "Duplicated"
+msgstr "Dupliziert"
-#: src/paths/instance/orders/list/Table.tsx:352
+#: src/paths/instance/orders/list/Table.tsx:293
#, c-format
-msgid "reason"
-msgstr ""
+msgid "This value exceed the refundable amount"
+msgstr "Dieser Wert übersteigt den erstattungsfähigen Betrag"
-#: src/paths/instance/orders/list/Table.tsx:389
+#: src/paths/instance/orders/list/Table.tsx:381
#, c-format
-msgid "amount to be refunded"
-msgstr ""
+msgid "Amount to be refunded"
+msgstr "Zu erstattender Betrag"
-#: src/paths/instance/orders/list/Table.tsx:391
+#: src/paths/instance/orders/list/Table.tsx:383
#, c-format
msgid "Max refundable:"
-msgstr ""
+msgstr "Maximale Rückerstattung:"
-#: src/paths/instance/orders/list/Table.tsx:396
-#, c-format
-msgid "Reason"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:397
-#, c-format
-msgid "Choose one..."
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:399
+#: src/paths/instance/orders/list/Table.tsx:391
#, c-format
-msgid "requested by the customer"
-msgstr ""
+msgid "Requested by the customer"
+msgstr "Von Käufern angefordert"
-#: src/paths/instance/orders/list/Table.tsx:400
+#: src/paths/instance/orders/list/Table.tsx:392
#, c-format
-msgid "other"
-msgstr ""
+msgid "Other"
+msgstr "Sonstiges"
-#: src/paths/instance/orders/list/Table.tsx:403
+#: src/paths/instance/orders/list/Table.tsx:395
#, c-format
-msgid "why this order is being refunded"
-msgstr ""
+msgid "Why this order is being refunded"
+msgstr "Grund für die Erstattung dieser Bestellung"
-#: src/paths/instance/orders/list/Table.tsx:409
+#: src/paths/instance/orders/list/Table.tsx:401
#, c-format
-msgid "more information to give context"
-msgstr ""
+msgid "More information to give context"
+msgstr "Weitere Informationen für eine genauere Beschreibung"
-#: src/paths/instance/orders/details/DetailPage.tsx:62
+#: src/paths/instance/orders/details/DetailPage.tsx:70
#, c-format
-msgid "Contract Terms"
-msgstr ""
+msgid "Contract terms"
+msgstr "Vertragsbedingungen"
-#: src/paths/instance/orders/details/DetailPage.tsx:68
+#: src/paths/instance/orders/details/DetailPage.tsx:76
#, c-format
-msgid "human-readable description of the whole purchase"
-msgstr ""
+msgid "Human-readable description of the whole purchase"
+msgstr "Für Menschen lesbare Information über den gesamten Kaufvorgang"
-#: src/paths/instance/orders/details/DetailPage.tsx:74
-#, c-format
-msgid "total price for the transaction"
-msgstr ""
+#: src/paths/instance/orders/details/DetailPage.tsx:82
+#, c-format, fuzzy
+msgid "Total price for the transaction"
+msgstr "Gesamtpreis der Transaktion"
-#: src/paths/instance/orders/details/DetailPage.tsx:81
+#: src/paths/instance/orders/details/DetailPage.tsx:89
#, c-format
msgid "URL for this purchase"
-msgstr ""
+msgstr "URL für diesen Kauf"
-#: src/paths/instance/orders/details/DetailPage.tsx:87
+#: src/paths/instance/orders/details/DetailPage.tsx:95
#, c-format
msgid "Max fee"
-msgstr ""
+msgstr "Höchster Gebührenbetrag"
-#: src/paths/instance/orders/details/DetailPage.tsx:88
+#: src/paths/instance/orders/details/DetailPage.tsx:96
#, c-format
-msgid "maximum total deposit fee accepted by the merchant for this contract"
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
msgstr ""
+"Maximale Einlösegeühr, die ein Verkäufer für diesen Kaufvertrag selbst "
+"tragen will"
-#: src/paths/instance/orders/details/DetailPage.tsx:93
+#: src/paths/instance/orders/details/DetailPage.tsx:101
#, c-format
-msgid "Max wire fee"
-msgstr ""
+msgid "Created at"
+msgstr "Erstellungsdatum"
-#: src/paths/instance/orders/details/DetailPage.tsx:94
+#: src/paths/instance/orders/details/DetailPage.tsx:102
#, c-format
-msgid "maximum wire fee accepted by the merchant"
-msgstr ""
+msgid "Time when this contract was generated"
+msgstr "Zeitpunkt, zu dem der Kaufvertrag erstellt wurde"
-#: src/paths/instance/orders/details/DetailPage.tsx:100
+#: src/paths/instance/orders/details/DetailPage.tsx:107
#, c-format
-msgid ""
-"over how many customer transactions does the merchant expect to amortize "
-"wire fees on average"
-msgstr ""
+msgid "Refund deadline"
+msgstr "Rückerstattungsfrist"
-#: src/paths/instance/orders/details/DetailPage.tsx:105
+#: src/paths/instance/orders/details/DetailPage.tsx:108
#, c-format
-msgid "Created at"
-msgstr ""
+msgid "After this deadline has passed no refunds will be accepted"
+msgstr "Nach Ablauf dieser Frist werden keine Rückerstattungen mehr akzeptiert"
-#: src/paths/instance/orders/details/DetailPage.tsx:106
+#: src/paths/instance/orders/details/DetailPage.tsx:113
#, c-format
-msgid "time when this contract was generated"
-msgstr ""
+msgid "Payment deadline"
+msgstr "Zahlungsfrist"
-#: src/paths/instance/orders/details/DetailPage.tsx:112
+#: src/paths/instance/orders/details/DetailPage.tsx:114
#, c-format
-msgid "after this deadline has passed no refunds will be accepted"
+msgid ""
+"After this deadline, the merchant won't accept payments for the contract"
msgstr ""
+"Nach Ablauf dieser Frist akzeptiert ein Verkäufer für den Vertrag keinen "
+"Rechnungsausgleich (Bezahlung durch Käufer)"
-#: src/paths/instance/orders/details/DetailPage.tsx:118
+#: src/paths/instance/orders/details/DetailPage.tsx:119
#, c-format
-msgid ""
-"after this deadline, the merchant won't accept payments for the contract"
-msgstr ""
+msgid "Wire transfer deadline"
+msgstr "Überweisungsfrist"
-#: src/paths/instance/orders/details/DetailPage.tsx:124
+#: src/paths/instance/orders/details/DetailPage.tsx:120
#, c-format
-msgid "transfer deadline for the exchange"
-msgstr ""
+msgid "Transfer deadline for the exchange"
+msgstr "Frist der Überweisung vom Zahlungsdienstleister an das Bankkonto"
-#: src/paths/instance/orders/details/DetailPage.tsx:130
+#: src/paths/instance/orders/details/DetailPage.tsx:126
#, c-format
-msgid "time indicating when the order should be delivered"
-msgstr ""
+msgid "Time indicating when the order should be delivered"
+msgstr "Zeitangabe, wann die Bestellung geliefert werden soll"
-#: src/paths/instance/orders/details/DetailPage.tsx:136
+#: src/paths/instance/orders/details/DetailPage.tsx:132
#, c-format
-msgid "where the order will be delivered"
-msgstr ""
+msgid "Where the order will be delivered"
+msgstr "Zustelladresse der Bestellung"
-#: src/paths/instance/orders/details/DetailPage.tsx:144
+#: src/paths/instance/orders/details/DetailPage.tsx:140
#, c-format
msgid "Auto-refund delay"
-msgstr ""
+msgstr "Zeitliche Verzögerung der automatischen Rückerstattung"
-#: src/paths/instance/orders/details/DetailPage.tsx:145
+#: src/paths/instance/orders/details/DetailPage.tsx:141
#, c-format
msgid ""
-"how long the wallet should try to get an automatic refund for the purchase"
+"How long the wallet should try to get an automatic refund for the purchase"
msgstr ""
+"So lange sollte ein Wallet versuchen, eine automatische Rückerstattung auf "
+"den Kaufvertrag zu erhalten"
-#: src/paths/instance/orders/details/DetailPage.tsx:150
+#: src/paths/instance/orders/details/DetailPage.tsx:146
#, c-format
msgid "Extra info"
-msgstr ""
+msgstr "Weitere Informationen"
-#: src/paths/instance/orders/details/DetailPage.tsx:151
+#: src/paths/instance/orders/details/DetailPage.tsx:147
#, c-format
-msgid "extra data that is only interpreted by the merchant frontend"
-msgstr ""
+msgid "Extra data that is only interpreted by the merchant frontend"
+msgstr "Zusätzliche Daten, die nur im Verkäufer-Frontend verarbeitet werden"
-#: src/paths/instance/orders/details/DetailPage.tsx:219
+#: src/paths/instance/orders/details/DetailPage.tsx:220
#, c-format
msgid "Order"
-msgstr ""
+msgstr "Bestellung"
-#: src/paths/instance/orders/details/DetailPage.tsx:221
+#: src/paths/instance/orders/details/DetailPage.tsx:222
#, c-format
-msgid "claimed"
-msgstr ""
+msgid "Claimed"
+msgstr "Schon für jemanden reserviert"
-#: src/paths/instance/orders/details/DetailPage.tsx:247
+#: src/paths/instance/orders/details/DetailPage.tsx:249
#, c-format
-msgid "claimed at"
-msgstr ""
+msgid "Claimed at"
+msgstr "Reserviert für"
-#: src/paths/instance/orders/details/DetailPage.tsx:265
+#: src/paths/instance/orders/details/DetailPage.tsx:271
#, c-format
msgid "Timeline"
-msgstr ""
+msgstr "Zeitleiste"
-#: src/paths/instance/orders/details/DetailPage.tsx:271
+#: src/paths/instance/orders/details/DetailPage.tsx:277
#, c-format
msgid "Payment details"
-msgstr ""
+msgstr "Zahlungsdetails"
-#: src/paths/instance/orders/details/DetailPage.tsx:291
+#: src/paths/instance/orders/details/DetailPage.tsx:297
#, c-format
msgid "Order status"
-msgstr ""
+msgstr "Bestellstatus"
-#: src/paths/instance/orders/details/DetailPage.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:307
#, c-format
msgid "Product list"
-msgstr ""
+msgstr "Artikelliste"
-#: src/paths/instance/orders/details/DetailPage.tsx:451
+#: src/paths/instance/orders/details/DetailPage.tsx:459
#, c-format
-msgid "paid"
-msgstr ""
-
-#: src/paths/instance/orders/details/DetailPage.tsx:455
-#, c-format
-msgid "wired"
-msgstr ""
+msgid "Paid"
+msgstr "Bezahlt"
-#: src/paths/instance/orders/details/DetailPage.tsx:460
+#: src/paths/instance/orders/details/DetailPage.tsx:463
#, c-format
-msgid "refunded"
-msgstr ""
+msgid "Wired"
+msgstr "Überwiesen"
-#: src/paths/instance/orders/details/DetailPage.tsx:480
+#: src/paths/instance/orders/details/DetailPage.tsx:468
#, c-format
-msgid "refund order"
-msgstr ""
+msgid "Refunded"
+msgstr "Rückerstattet"
-#: src/paths/instance/orders/details/DetailPage.tsx:481
+#: src/paths/instance/orders/details/DetailPage.tsx:488
#, c-format
-msgid "not refundable"
-msgstr ""
+msgid "Refund order"
+msgstr "Bestellung rückerstatten"
#: src/paths/instance/orders/details/DetailPage.tsx:489
#, c-format
-msgid "refund"
-msgstr ""
+msgid "Not refundable"
+msgstr "Nicht erstattungsfähig"
-#: src/paths/instance/orders/details/DetailPage.tsx:553
+#: src/paths/instance/orders/details/DetailPage.tsx:519
+#, c-format, fuzzy
+msgid "Next event in"
+msgstr "Nächste Veranstaltung in"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:555
#, c-format
msgid "Refunded amount"
-msgstr ""
+msgstr "Rückerstattungsbetrag"
-#: src/paths/instance/orders/details/DetailPage.tsx:560
+#: src/paths/instance/orders/details/DetailPage.tsx:562
#, c-format
msgid "Refund taken"
-msgstr ""
+msgstr "Erhaltener Rückerstattungsbetrag"
-#: src/paths/instance/orders/details/DetailPage.tsx:570
+#: src/paths/instance/orders/details/DetailPage.tsx:572
#, c-format
msgid "Status URL"
-msgstr ""
+msgstr "Status-URL"
-#: src/paths/instance/orders/details/DetailPage.tsx:583
+#: src/paths/instance/orders/details/DetailPage.tsx:585
#, c-format
msgid "Refund URI"
-msgstr ""
-
-#: src/paths/instance/orders/details/DetailPage.tsx:636
-#, c-format
-msgid "unpaid"
-msgstr ""
+msgstr "Rückerstattungs-URI"
-#: src/paths/instance/orders/details/DetailPage.tsx:654
+#: src/paths/instance/orders/details/DetailPage.tsx:639
#, c-format
-msgid "pay at"
-msgstr ""
+msgid "Unpaid"
+msgstr "Noch nicht bezahlt"
-#: src/paths/instance/orders/details/DetailPage.tsx:666
-#, c-format
-msgid "created at"
-msgstr ""
+#: src/paths/instance/orders/details/DetailPage.tsx:657
+#, c-format, fuzzy
+msgid "Pay at"
+msgstr "Bezahlen Sie"
-#: src/paths/instance/orders/details/DetailPage.tsx:707
+#: src/paths/instance/orders/details/DetailPage.tsx:710
#, c-format
msgid "Order status URL"
-msgstr ""
+msgstr "Bestellstatus-URL"
-#: src/paths/instance/orders/details/DetailPage.tsx:711
+#: src/paths/instance/orders/details/DetailPage.tsx:714
#, c-format
msgid "Payment URI"
-msgstr ""
+msgstr "Zahlungs-URI"
-#: src/paths/instance/orders/details/DetailPage.tsx:740
+#: src/paths/instance/orders/details/DetailPage.tsx:743
#, c-format
msgid ""
"Unknown order status. This is an error, please contact the administrator."
msgstr ""
+"Unbekannter Bestellstatus. Dies ist ein Fehler, bitte kontaktieren Sie den "
+"Administrator."
-#: src/paths/instance/orders/details/DetailPage.tsx:767
+#: src/paths/instance/orders/details/DetailPage.tsx:770
#, c-format
msgid "Back"
msgstr "Zurück"
-#: src/paths/instance/orders/details/index.tsx:79
+#: src/paths/instance/orders/details/index.tsx:88
#, c-format
-msgid "refund created successfully"
-msgstr ""
+msgid "Refund created successfully"
+msgstr "Die Rückerstattung ist erfolgreich durchgeführt worden"
-#: src/paths/instance/orders/details/index.tsx:85
+#: src/paths/instance/orders/details/index.tsx:95
#, c-format
-msgid "could not create the refund"
-msgstr ""
+msgid "Could not create the refund"
+msgstr "Die Rückerstattung konnte nicht erstellt werden"
-#: src/paths/instance/orders/list/ListPage.tsx:78
+#: src/paths/instance/orders/details/index.tsx:97
#, c-format
-msgid "select date to show nearby orders"
+msgid "There are pending KYC requirements."
msgstr ""
+"Es sind noch KYC-Erfordernisse zu erfüllen (Prüfung der wirtschaftlich "
+"Berechtigten)."
-#: src/paths/instance/orders/list/ListPage.tsx:94
+#: src/components/form/JumpToElementById.tsx:39
#, c-format
-msgid "order id"
-msgstr ""
-
-#: src/paths/instance/orders/list/ListPage.tsx:100
-#, c-format
-msgid "jump to order with the given order ID"
-msgstr ""
+msgid "Missing id"
+msgstr "ID fehlt"
-#: src/paths/instance/orders/list/ListPage.tsx:122
+#: src/components/form/JumpToElementById.tsx:48
#, c-format
-msgid "remove all filters"
-msgstr ""
+msgid "Not found"
+msgstr "Nicht gefunden"
-#: src/paths/instance/orders/list/ListPage.tsx:132
+#: src/paths/instance/orders/list/ListPage.tsx:83
#, c-format
-msgid "only show paid orders"
-msgstr ""
+msgid "Select date to show nearby orders"
+msgstr "Datum wählen, um Bestellungen des Zeitraums anzuzeigen"
-#: src/paths/instance/orders/list/ListPage.tsx:135
+#: src/paths/instance/orders/list/ListPage.tsx:96
#, c-format
-msgid "Paid"
-msgstr ""
+msgid "Only show paid orders"
+msgstr "Nur bezahlte Bestellungen anzeigen"
-#: src/paths/instance/orders/list/ListPage.tsx:142
+#: src/paths/instance/orders/list/ListPage.tsx:99
#, c-format
-msgid "only show orders with refunds"
-msgstr ""
+msgid "New"
+msgstr "Neu"
-#: src/paths/instance/orders/list/ListPage.tsx:145
+#: src/paths/instance/orders/list/ListPage.tsx:116
#, c-format
-msgid "Refunded"
-msgstr "Rückerstattet"
+msgid "Only show orders with refunds"
+msgstr "Nur Bestellungen mit Rückerstattungen anzeigen"
-#: src/paths/instance/orders/list/ListPage.tsx:152
+#: src/paths/instance/orders/list/ListPage.tsx:126
#, c-format
msgid ""
-"only show orders where customers paid, but wire payments from payment "
+"Only show orders where customers paid, but wire payments from payment "
"provider are still pending"
msgstr ""
+"Nur schon von Käufern bereits bezahlte Bestellungen anzeigen, deren "
+"Überweisung durch den Zahlungsdienstleister noch ausstehen"
-#: src/paths/instance/orders/list/ListPage.tsx:155
+#: src/paths/instance/orders/list/ListPage.tsx:129
#, c-format
msgid "Not wired"
-msgstr ""
+msgstr "Nicht überwiesen"
-#: src/paths/instance/orders/list/ListPage.tsx:170
+#: src/paths/instance/orders/list/ListPage.tsx:139
#, c-format
-msgid "clear date filter"
-msgstr ""
+msgid "Completed"
+msgstr "Ausgeführt"
-#: src/paths/instance/orders/list/ListPage.tsx:184
+#: src/paths/instance/orders/list/ListPage.tsx:146
#, c-format
-msgid "date (YYYY/MM/DD)"
-msgstr ""
+msgid "Remove all filters"
+msgstr "Alle Filter aufheben"
-#: src/paths/instance/orders/list/index.tsx:103
+#: src/paths/instance/orders/list/ListPage.tsx:164
#, c-format
-msgid "Enter an order id"
-msgstr ""
+msgid "Clear date filter"
+msgstr "Datumsfilter aufheben"
-#: src/paths/instance/orders/list/index.tsx:111
+#: src/paths/instance/orders/list/ListPage.tsx:178
#, c-format
-msgid "order not found"
-msgstr ""
+msgid "Jump to date (%1$s)"
+msgstr "Springe zum Datum (%1$s)"
-#: src/paths/instance/orders/list/index.tsx:178
+#: src/paths/instance/orders/list/index.tsx:113
#, c-format
-msgid "could not get the order to refund"
-msgstr ""
+msgid "Jump to order with the given product ID"
+msgstr "Zur Bestellung mit angegebener Artikel-ID gehen"
-#: src/components/exception/AsyncButton.tsx:43
+#: src/paths/instance/orders/list/index.tsx:114
#, c-format
-msgid "Loading..."
-msgstr ""
+msgid "Order id"
+msgstr "Bestellnummer"
-#: src/components/form/InputStock.tsx:99
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
#, c-format
-msgid ""
-"click here to configure the stock of the product, leave it as is and the "
-"backend will not control stock"
-msgstr ""
+msgid "Invalid. Please insert only characters and numbers"
+msgstr "Ungültig. Bitte geben Sie nur Buchstaben und Zahlen ein"
-#: src/components/form/InputStock.tsx:109
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
#, c-format
-msgid "Manage stock"
-msgstr ""
+msgid "Just letters and numbers from 2 to 7"
+msgstr "Nur Buchstaben und Zahlen von 2 bis 7"
-#: src/components/form/InputStock.tsx:115
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
#, c-format
-msgid "this product has been configured without stock control"
-msgstr ""
+msgid "Size of the key must be 32"
+msgstr "Die Schlüssellänge muss 32 Zeichen umfassen"
-#: src/components/form/InputStock.tsx:119
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
#, c-format
-msgid "Infinite"
-msgstr ""
+msgid "Internal id on the system"
+msgstr "Interne ID auf dem System"
-#: src/components/form/InputStock.tsx:136
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
#, c-format
-msgid "lost cannot be greater than current and incoming (max %1$s)"
-msgstr ""
+msgid "Useful to identify the device physically"
+msgstr "Dies ist nützlich, um das Gerät physisch zu identifizieren"
-#: src/components/form/InputStock.tsx:176
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
#, c-format
-msgid "Incoming"
-msgstr ""
+msgid "Verification algorithm"
+msgstr "Überprüfungsalgorithmus"
-#: src/components/form/InputStock.tsx:177
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
#, c-format
-msgid "Lost"
-msgstr ""
+msgid "Algorithm to use to verify transaction in offline mode"
+msgstr "Algorithmus für das Überprüfen von Transaktionen im Offline-Modus"
-#: src/components/form/InputStock.tsx:192
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
#, c-format
-msgid "Current"
-msgstr ""
+msgid "Device key"
+msgstr "Geräteschlüssel (Device key)"
-#: src/components/form/InputStock.tsx:196
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
#, c-format
-msgid "remove stock control for this product"
+msgid "Be sure to be very hard to guess or use the random generator"
msgstr ""
+"Das Passwort muss schwer zu erraten sein oder aus einem "
+"Zufallszahlengenerator stammen"
-#: src/components/form/InputStock.tsx:202
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
#, c-format
-msgid "without stock"
-msgstr ""
+msgid "Your device need to have exactly the same value"
+msgstr "Ihr Gerät muss genau das gleiche Ergebnis anzeigen"
-#: src/components/form/InputStock.tsx:211
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
#, c-format
-msgid "Next restock"
-msgstr ""
+msgid "Generate random secret key"
+msgstr "Zufälligen privaten Schlüssel erzeugen"
-#: src/components/form/InputStock.tsx:217
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
#, c-format
-msgid "Delivery address"
-msgstr ""
+msgid "Random"
+msgstr "Zufallsbasiert"
-#: src/components/product/ProductForm.tsx:133
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
#, c-format
-msgid "product identification to use in URLs (for internal use only)"
+msgid ""
+"You can scan the next QR code with your device or save the key before "
+"continuing."
msgstr ""
+"Sie können den nächsten QR-Code mit Ihrem Gerät scannen oder den Schlüssel "
+"speichern, bevor Sie fortfahren."
-#: src/components/product/ProductForm.tsx:139
+#: src/paths/instance/otp_devices/create/index.tsx:60
#, c-format
-msgid "illustration of the product for customers"
-msgstr ""
+msgid "Device added successfully"
+msgstr "Das Gerät wurde erfolgreich hinzugefügt"
-#: src/components/product/ProductForm.tsx:145
+#: src/paths/instance/otp_devices/create/index.tsx:66
#, c-format
-msgid "product description for customers"
-msgstr ""
+msgid "Could not add device"
+msgstr "Das Gerät konnte nicht hinzugefügt werden"
-#: src/components/product/ProductForm.tsx:149
+#: src/paths/instance/otp_devices/list/Table.tsx:57
#, c-format
-msgid "Age restricted"
-msgstr ""
+msgid "OTP Devices"
+msgstr "OTP-Geräte"
-#: src/components/product/ProductForm.tsx:150
+#: src/paths/instance/otp_devices/list/Table.tsx:62
#, c-format
-msgid "is this product restricted for customer below certain age?"
-msgstr ""
+msgid "Add new devices"
+msgstr "Neue Geräte hinzufügen"
-#: src/components/product/ProductForm.tsx:155
+#: src/paths/instance/otp_devices/list/Table.tsx:117
#, c-format
-msgid ""
-"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
-"items, 5 meters) for customers"
-msgstr ""
+msgid "Load more devices before the first one"
+msgstr "Mehr Geräte vor ein erstes Gerät laden"
-#: src/components/product/ProductForm.tsx:160
+#: src/paths/instance/otp_devices/list/Table.tsx:155
#, c-format
-msgid ""
-"sale price for customers, including taxes, for above units of the product"
-msgstr ""
+msgid "Delete selected devices from the database"
+msgstr "Ausgewählte Geräte aus der Datenbank entfernen"
-#: src/components/product/ProductForm.tsx:164
+#: src/paths/instance/otp_devices/list/Table.tsx:170
#, c-format
-msgid "Stock"
-msgstr ""
+msgid "Load more devices after the last one"
+msgstr "Mehr Geräte nach dem letzten Gerät laden"
-#: src/components/product/ProductForm.tsx:166
+#: src/paths/instance/otp_devices/list/Table.tsx:190
#, c-format
-msgid ""
-"product inventory for products with finite supply (for internal use only)"
+msgid "There is are devices yet, add more pressing the + sign"
msgstr ""
+"Es gibt noch keine Instanz. Sie können diese mit dem +-Zeichen hinzufügen"
-#: src/components/product/ProductForm.tsx:171
+#: src/paths/instance/otp_devices/list/index.tsx:90
#, c-format
-msgid "taxes included in the product price, exposed to customers"
-msgstr ""
+msgid "Device delete successfully"
+msgstr "Das Gerät wurde erfolgreich entfernt"
-#: src/paths/instance/products/create/CreatePage.tsx:66
+#: src/paths/instance/otp_devices/list/index.tsx:95
#, c-format
-msgid "Need to complete marked fields"
-msgstr ""
+msgid "Could not delete the device"
+msgstr "Das Gerät konnte nicht gelöscht werden"
-#: src/paths/instance/products/create/index.tsx:51
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
#, c-format
-msgid "could not create product"
-msgstr ""
+msgid "Device:"
+msgstr "Gerät:"
-#: src/paths/instance/products/list/Table.tsx:68
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
#, c-format
-msgid "Products"
-msgstr ""
+msgid "Not modified"
+msgstr "Unverändert"
-#: src/paths/instance/products/list/Table.tsx:73
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
#, c-format
-msgid "add product to inventory"
-msgstr ""
+msgid "Change key"
+msgstr "Schlüssel ändern"
-#: src/paths/instance/products/list/Table.tsx:137
+#: src/paths/instance/otp_devices/update/index.tsx:119
#, c-format
-msgid "Sell"
-msgstr ""
+msgid "Could not update template"
+msgstr "Die Vorlage konnte nicht aktualisiert werden"
-#: src/paths/instance/products/list/Table.tsx:143
+#: src/paths/instance/otp_devices/update/index.tsx:121
#, c-format
-msgid "Profit"
-msgstr ""
+msgid "Template id is unknown"
+msgstr "Die Vorlagen-ID ist unbekannt"
-#: src/paths/instance/products/list/Table.tsx:149
+#: src/paths/instance/otp_devices/update/index.tsx:129
#, c-format
-msgid "Sold"
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
msgstr ""
+"Die bereitgestellten Informationen stimmen nicht mit dem aktuellen Stand der "
+"Vorlage überein"
-#: src/paths/instance/products/list/Table.tsx:210
+#: src/components/form/InputStock.tsx:99
#, c-format
-msgid "free"
+msgid ""
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:248
+#: src/components/form/InputStock.tsx:109
#, c-format
-msgid "go to product update page"
-msgstr ""
+msgid "Manage stock"
+msgstr "Bestand verwalten"
-#: src/paths/instance/products/list/Table.tsx:255
+#: src/components/form/InputStock.tsx:115
#, c-format
-msgid "Update"
+msgid "This product has been configured without stock control"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:260
+#: src/components/form/InputStock.tsx:119
#, c-format
-msgid "remove this product from the database"
-msgstr ""
+msgid "Infinite"
+msgstr "Unbegrenzt"
-#: src/paths/instance/products/list/Table.tsx:331
+#: src/components/form/InputStock.tsx:136
#, c-format
-msgid "update the product with new price"
+msgid "Lost can't be greater than current and incoming (max %1$s)"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:341
+#: src/components/form/InputStock.tsx:169
#, c-format
-msgid "update product with new price"
-msgstr ""
+msgid "Incoming"
+msgstr "In der Zulieferung"
-#: src/paths/instance/products/list/Table.tsx:399
+#: src/components/form/InputStock.tsx:170
#, c-format
-msgid "add more elements to the inventory"
-msgstr ""
+msgid "Lost"
+msgstr "Schwund (Inventurdifferenz)"
-#: src/paths/instance/products/list/Table.tsx:404
+#: src/components/form/InputStock.tsx:185
#, c-format
-msgid "report elements lost in the inventory"
-msgstr ""
+msgid "Current"
+msgstr "Aktuell"
-#: src/paths/instance/products/list/Table.tsx:409
+#: src/components/form/InputStock.tsx:189
#, c-format
-msgid "new price for the product"
+msgid "Remove stock control for this product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:421
+#: src/components/form/InputStock.tsx:195
#, c-format
-msgid "the are value with errors"
-msgstr ""
+msgid "without stock"
+msgstr "ohne Bestand"
-#: src/paths/instance/products/list/Table.tsx:422
+#: src/components/form/InputStock.tsx:204
#, c-format
-msgid "update product with new stock and price"
-msgstr ""
+msgid "Next restock"
+msgstr "Nächstes Auffüllen des Bestands"
-#: src/paths/instance/products/list/Table.tsx:463
+#: src/components/form/InputStock.tsx:208
#, c-format
-msgid "There is no products yet, add more pressing the + sign"
+msgid "Warehouse address"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:86
+#: src/components/form/InputArray.tsx:118
#, c-format
-msgid "product updated successfully"
+msgid "Add element to the list"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:92
+#: src/components/product/ProductForm.tsx:120
#, c-format
-msgid "could not update the product"
+msgid "Invalid amount"
+msgstr "Kein gültiger Betrag"
+
+#: src/components/product/ProductForm.tsx:191
+#, c-format
+msgid "Product identification to use in URLs (for internal use only)."
msgstr ""
-#: src/paths/instance/products/list/index.tsx:103
+#: src/components/product/ProductForm.tsx:197
#, c-format
-msgid "product delete successfully"
+msgid "Illustration of the product for customers."
msgstr ""
-#: src/paths/instance/products/list/index.tsx:109
+#: src/components/product/ProductForm.tsx:203
+#, c-format
+msgid "Product description for customers."
+msgstr "Artikelbeschreibung, die Kunden zu sehen bekommen."
+
+#: src/components/product/ProductForm.tsx:207
#, c-format
-msgid "could not delete the product"
+msgid "Age restriction"
msgstr ""
-#: src/paths/instance/products/update/UpdatePage.tsx:56
+#: src/components/product/ProductForm.tsx:208
#, c-format
-msgid "Product id:"
+msgid "Is this product restricted for customer below certain age?"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:95
+#: src/components/product/ProductForm.tsx:209
+#, c-format
+msgid "Minimum age of the customer"
+msgstr "Mindestalter von Käufern"
+
+#: src/components/product/ProductForm.tsx:213
+#, c-format
+msgid "Unit name"
+msgstr "Bezeichnung der Mengeneinheit"
+
+#: src/components/product/ProductForm.tsx:214
#, c-format
msgid ""
-"To complete the setup of the reserve, you must now initiate a wire transfer "
-"using the given wire transfer subject and crediting the specified amount to "
-"the indicated account of the exchange."
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
msgstr ""
+"Die den Käufern angezeigte Mengeneinheit des Artikels im Verkauf (z.B. 2 "
+"Kilogramm, 5 Liter, 3 Stück, 5 Meter)."
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:102
+#: src/components/product/ProductForm.tsx:215
#, c-format
-msgid "If your system supports RFC 8905, you can do this by opening this URI:"
-msgstr ""
+msgid "Example: kg, items or liters"
+msgstr "Beispiel: kg, Stück oder Liter"
-#: src/paths/instance/reserves/create/CreatePage.tsx:83
+#: src/components/product/ProductForm.tsx:219
#, c-format
-msgid "it should be greater than 0"
-msgstr ""
+msgid "Price per unit"
+msgstr "Preis pro Mengeneinheit"
-#: src/paths/instance/reserves/create/CreatePage.tsx:88
+#: src/components/product/ProductForm.tsx:220
#, c-format
-msgid "must be a valid URL"
+msgid ""
+"Sale price for customers, including taxes, for above units of the product."
msgstr ""
+"Verkaufspreis an Endkunden, inklusive Steuern, für jede oben genannte "
+"Mengeneinheit des Artikels."
-#: src/paths/instance/reserves/create/CreatePage.tsx:107
+#: src/components/product/ProductForm.tsx:224
#, c-format
-msgid "Initial balance"
-msgstr ""
+msgid "Stock"
+msgstr "Bestand"
-#: src/paths/instance/reserves/create/CreatePage.tsx:108
+#: src/components/product/ProductForm.tsx:226
#, c-format
-msgid "balance prior to deposit"
+msgid "Inventory for products with finite supply (for internal use only)."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:112
+#: src/components/product/ProductForm.tsx:231
#, c-format
-msgid "Exchange URL"
+msgid "Taxes included in the product price, exposed to customers."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:113
+#: src/components/product/ProductForm.tsx:235
#, c-format
-msgid "URL of exchange"
+msgid "Categories"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:148
+#: src/components/product/ProductForm.tsx:241
#, c-format
-msgid "Next"
+msgid "Search by category description or id"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:186
+#: src/components/product/ProductForm.tsx:242
#, c-format
-msgid "Wire method"
-msgstr ""
+msgid "Categories where this product will be listed on."
+msgstr "Kategorien, in denen dieser Artikel aufgeführt sein wird."
-#: src/paths/instance/reserves/create/CreatePage.tsx:187
+#: src/paths/instance/products/create/index.tsx:52
#, c-format
-msgid "method to use for wire transfer"
+msgid "Product created successfully"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:189
+#: src/paths/instance/products/create/index.tsx:58
#, c-format
-msgid "Select one wire method"
+msgid "Could not create product"
msgstr ""
-#: src/paths/instance/reserves/create/index.tsx:62
+#: src/paths/instance/products/list/Table.tsx:76
#, c-format
-msgid "could not create reserve"
+msgid "Inventory"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:77
+#: src/paths/instance/products/list/Table.tsx:81
#, c-format
-msgid "Valid until"
+msgid "Add product to inventory"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:82
+#: src/paths/instance/products/list/Table.tsx:163
#, c-format
-msgid "Created balance"
+msgid "Sales"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:99
+#: src/paths/instance/products/list/Table.tsx:169
#, c-format
-msgid "Exchange balance"
-msgstr ""
+msgid "Sold"
+msgstr "Verkauft"
-#: src/paths/instance/reserves/details/DetailPage.tsx:104
+#: src/paths/instance/products/list/Table.tsx:235
#, c-format
-msgid "Picked up"
+msgid "Free"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:109
+#: src/paths/instance/products/list/Table.tsx:275
#, c-format
-msgid "Committed"
+msgid "Go to product update page"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:116
+#: src/paths/instance/products/list/Table.tsx:282
#, c-format
-msgid "Account address"
-msgstr ""
+msgid "Update"
+msgstr "Aktualisieren"
-#: src/paths/instance/reserves/details/DetailPage.tsx:119
+#: src/paths/instance/products/list/Table.tsx:287
#, c-format
-msgid "Subject"
-msgstr "Verwendungszweck"
+msgid "Remove this product from the database"
+msgstr "Diesen Artikel aus der Datenbank entfernen"
-#: src/paths/instance/reserves/details/DetailPage.tsx:130
+#: src/paths/instance/products/list/Table.tsx:323
#, c-format
-msgid "Tips"
+msgid "Load more products after the last one"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:193
+#: src/paths/instance/products/list/Table.tsx:365
#, c-format
-msgid "No tips has been authorized from this reserve"
+msgid "Update the product with new price"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:213
+#: src/paths/instance/products/list/Table.tsx:376
#, c-format
-msgid "Authorized"
-msgstr ""
+msgid "Update product with new price"
+msgstr "Artikelpreis aktualisieren"
-#: src/paths/instance/reserves/details/DetailPage.tsx:222
+#: src/paths/instance/products/list/Table.tsx:387
#, c-format
-msgid "Expiration"
-msgstr ""
+msgid "Confirm update"
+msgstr "Aktualisierung bestätigen"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:108
+#: src/paths/instance/products/list/Table.tsx:435
#, c-format
-msgid "amount of tip"
+msgid "Add more elements to the inventory"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:112
+#: src/paths/instance/products/list/Table.tsx:440
#, c-format
-msgid "Justification"
+msgid "Report elements lost in the inventory"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:114
+#: src/paths/instance/products/list/Table.tsx:445
#, c-format
-msgid "reason for the tip"
+msgid "New price for the product"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:118
+#: src/paths/instance/products/list/Table.tsx:457
#, c-format
-msgid "URL after tip"
+msgid "The are value with errors"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:119
+#: src/paths/instance/products/list/Table.tsx:458
#, c-format
-msgid "URL to visit after tip payment"
+msgid "Update product with new stock and price"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:65
+#: src/paths/instance/products/list/Table.tsx:499
#, c-format
-msgid "Reserves not yet funded"
+msgid "There are no products yet, add more pressing the + sign"
msgstr ""
+"Es gibt noch keine Artikel. Sie können diese mit dem +-Zeichen hinzufügen"
-#: src/paths/instance/reserves/list/Table.tsx:89
+#: src/paths/instance/products/list/index.tsx:86
#, c-format
-msgid "Reserves ready"
+msgid "Jump to product with the given product ID"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:95
+#: src/paths/instance/products/list/index.tsx:87
#, c-format
-msgid "add new reserve"
-msgstr ""
+msgid "Product id"
+msgstr "Artikel-ID"
-#: src/paths/instance/reserves/list/Table.tsx:143
+#: src/paths/instance/products/list/index.tsx:104
#, c-format
-msgid "Expires at"
+msgid "Product updated successfully"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:146
+#: src/paths/instance/products/list/index.tsx:109
#, c-format
-msgid "Initial"
+msgid "Could not update the product"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:202
+#: src/paths/instance/products/list/index.tsx:144
#, c-format
-msgid "delete selected reserve from the database"
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:210
+#: src/paths/instance/products/list/index.tsx:149
#, c-format
-msgid "authorize new tip from selected reserve"
+msgid "Could not delete the product"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:237
+#: src/paths/instance/products/list/index.tsx:165
#, c-format
msgid ""
-"There is no ready reserves yet, add more pressing the + sign or fund them"
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:264
+#: src/paths/instance/products/list/index.tsx:173
#, c-format
-msgid "Expected Balance"
+msgid "Deleting an product can't be undone."
msgstr ""
-#: src/paths/instance/reserves/list/index.tsx:110
+#: src/paths/instance/products/update/UpdatePage.tsx:56
#, c-format
-msgid "could not create the tip"
-msgstr ""
+msgid "Product id:"
+msgstr "Artikel-ID:"
-#: src/paths/instance/templates/create/CreatePage.tsx:77
+#: src/paths/instance/products/update/index.tsx:85
#, c-format
-msgid "should not be empty"
-msgstr ""
+msgid "Product (ID: %1$s) has been updated"
+msgstr "Der Artikel (ID: %1$s) wurde aktualisiert"
-#: src/paths/instance/templates/create/CreatePage.tsx:93
+#: src/paths/instance/products/update/index.tsx:91
#, c-format
-msgid "should be greater that 0"
-msgstr ""
+msgid "Could not update product"
+msgstr "Der Artikel konnte nicht aktualisiert werden"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:112
+#, c-format
+msgid "Must be greater that 0"
+msgstr "Dieser Wert muss größer als Null sein"
-#: src/paths/instance/templates/create/CreatePage.tsx:96
+#: src/paths/instance/templates/create/CreatePage.tsx:119
#, c-format
-msgid "can't be empty"
+msgid "Too short"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:100
+#: src/paths/instance/templates/create/CreatePage.tsx:192
+#, c-format
+msgid "Identifier"
+msgstr "Eindeutige Kennung"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:193
+#, c-format
+msgid "Name of the template in URLs."
+msgstr "Name der Vorlage in URLs."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:199
+#, c-format
+msgid "Describe what this template stands for"
+msgstr "Beschreiben Sie, wofür diese Vorlage stehen soll"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:206
#, c-format
-msgid "to short"
+msgid "If specified, this template will create an order with the same summary"
msgstr ""
+"Falls angegeben, wird diese Vorlage Bestellungen mit der gleichen "
+"Zusammenfassung erzeugen"
-#: src/paths/instance/templates/create/CreatePage.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:210
#, c-format
-msgid "just letters and numbers from 2 to 7"
+msgid "Summary is editable"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:110
+#: src/paths/instance/templates/create/CreatePage.tsx:211
#, c-format
-msgid "size of the key should be 32"
+msgid "Allow the user to change the summary."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:137
+#: src/paths/instance/templates/create/CreatePage.tsx:217
#, c-format
-msgid "Identifier"
+msgid "If specified, this template will create an order with the same price"
msgstr ""
+"Falls angegeben, wird diese Vorlage Bestellungen mit dem gleichen Preis "
+"erzeugen"
-#: src/paths/instance/templates/create/CreatePage.tsx:138
+#: src/paths/instance/templates/create/CreatePage.tsx:221
#, c-format
-msgid "Name of the template in URLs."
+msgid "Amount is editable"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:144
+#: src/paths/instance/templates/create/CreatePage.tsx:222
#, c-format
-msgid "Describe what this template stands for"
+msgid "Allow the user to select the amount to pay."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:149
+#: src/paths/instance/templates/create/CreatePage.tsx:229
#, c-format
-msgid "Fixed summary"
+msgid "Currency is editable"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:150
+#: src/paths/instance/templates/create/CreatePage.tsx:230
#, c-format
-msgid "If specified, this template will create order with the same summary"
+msgid "Allow the user to change currency."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:154
+#: src/paths/instance/templates/create/CreatePage.tsx:232
#, c-format
-msgid "Fixed price"
+msgid "Supported currencies"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:155
+#: src/paths/instance/templates/create/CreatePage.tsx:233
#, c-format
-msgid "If specified, this template will create order with the same price"
+msgid "Supported currencies: %1$s"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:159
+#: src/paths/instance/templates/create/CreatePage.tsx:241
#, c-format
msgid "Minimum age"
-msgstr ""
+msgstr "Mindestalter"
-#: src/paths/instance/templates/create/CreatePage.tsx:161
+#: src/paths/instance/templates/create/CreatePage.tsx:243
#, c-format
msgid "Is this contract restricted to some age?"
-msgstr ""
+msgstr "Verlangt dieser Kaufvertrag ein bestimmtes Mindestalter?"
-#: src/paths/instance/templates/create/CreatePage.tsx:165
+#: src/paths/instance/templates/create/CreatePage.tsx:247
#, c-format
msgid "Payment timeout"
-msgstr ""
+msgstr "Die Zahlungsfrist ist verstrichen"
-#: src/paths/instance/templates/create/CreatePage.tsx:167
+#: src/paths/instance/templates/create/CreatePage.tsx:249
#, c-format
msgid ""
-"How much time has the customer to complete the payment once the order was "
+"How much time the customer has to complete the payment once the order was "
"created."
msgstr ""
+"Wie lange der Käufer Zeit hat, um zu bezahlen, nachdem die Bestellung "
+"angelegt wurde."
-#: src/paths/instance/templates/create/CreatePage.tsx:171
+#: src/paths/instance/templates/create/CreatePage.tsx:254
#, c-format
-msgid "Verification algorithm"
+msgid "OTP device"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:172
+#: src/paths/instance/templates/create/CreatePage.tsx:255
#, c-format
-msgid "Algorithm to use to verify transaction in offline mode"
+msgid "Use to verify transaction while offline."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:180
+#: src/paths/instance/templates/create/CreatePage.tsx:257
#, c-format
-msgid "Point-of-sale key"
+msgid "No OTP device."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:182
+#: src/paths/instance/templates/create/CreatePage.tsx:259
#, c-format
-msgid "Useful to validate the purchase"
+msgid "Add one first"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:196
+#: src/paths/instance/templates/create/CreatePage.tsx:272
#, c-format
-msgid "generate random secret key"
+msgid "No device"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:203
+#: src/paths/instance/templates/create/CreatePage.tsx:276
#, c-format
-msgid "random"
+msgid "Use to verify transaction in offline mode."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:208
+#: src/paths/instance/templates/create/index.tsx:52
#, c-format
-msgid "show secret key"
+msgid "Template has been created"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:209
+#: src/paths/instance/templates/create/index.tsx:58
#, c-format
-msgid "hide secret key"
+msgid "Could not create template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:216
+#: src/paths/instance/templates/list/Table.tsx:61
#, c-format
-msgid "hide"
+msgid "Templates"
+msgstr "Vorlagen"
+
+#: src/paths/instance/templates/list/Table.tsx:66
+#, c-format
+msgid "Add new templates"
+msgstr "Neue Vorlagen hinzufügen"
+
+#: src/paths/instance/templates/list/Table.tsx:127
+#, c-format
+msgid "Load more templates before the first one"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:218
+#: src/paths/instance/templates/list/Table.tsx:165
#, c-format
-msgid "show"
+msgid "Delete selected templates from the database"
msgstr ""
-#: src/paths/instance/templates/create/index.tsx:52
+#: src/paths/instance/templates/list/Table.tsx:172
#, c-format
-msgid "could not inform template"
+msgid "Use template to create new order"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:54
+#: src/paths/instance/templates/list/Table.tsx:175
#, c-format
-msgid "Amount is required"
+msgid "Use template"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:58
+#: src/paths/instance/templates/list/Table.tsx:179
#, c-format
-msgid "Order summary is required"
+msgid "Create qr code for the template"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:86
+#: src/paths/instance/templates/list/Table.tsx:194
#, c-format
-msgid "New order for template"
+msgid "Load more templates after the last one"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:108
+#: src/paths/instance/templates/list/Table.tsx:214
#, c-format
-msgid "Amount of the order"
+msgid "There are no templates yet, add more pressing the + sign"
msgstr ""
+"Es gibt noch keine Vorlagen. Sie können diese mit dem +-Zeichen hinzufügen"
-#: src/paths/instance/templates/use/UsePage.tsx:113
+#: src/paths/instance/templates/list/index.tsx:91
#, c-format
-msgid "Order summary"
+msgid "Jump to template with the given template ID"
msgstr ""
-#: src/paths/instance/templates/use/index.tsx:92
+#: src/paths/instance/templates/list/index.tsx:92
#, c-format
-msgid "could not create order from template"
+msgid "Template identification"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:131
+#: src/paths/instance/templates/list/index.tsx:132
#, c-format
-msgid ""
-"Here you can specify a default value for fields that are not fixed. Default "
-"values can be edited by the customer before the payment."
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:148
+#: src/paths/instance/templates/list/index.tsx:137
#, c-format
-msgid "Fixed amount"
+msgid "Failed to delete template"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:149
+#: src/paths/instance/templates/list/index.tsx:153
#, c-format
-msgid "Default amount"
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:161
+#: src/paths/instance/templates/list/index.tsx:160
#, c-format
-msgid "Default summary"
+msgid "Deleting an template"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:177
+#: src/paths/instance/templates/list/index.tsx:162
+#, c-format
+msgid "can't be undone"
+msgstr "Das kann nicht rückgängig gemacht werden"
+
+#: src/paths/instance/templates/qr/QrPage.tsx:77
#, c-format
msgid "Print"
-msgstr ""
+msgstr "Drucken"
-#: src/paths/instance/templates/qr/QrPage.tsx:184
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
#, c-format
-msgid "Setup TOTP"
+msgid "If specified, this template will create order with the same summary"
msgstr ""
+"Falls angegeben, wird diese Vorlage Bestellungen mit der gleichen "
+"Zusammenfassung erzeugen"
-#: src/paths/instance/templates/list/Table.tsx:65
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
#, c-format
-msgid "Templates"
+msgid "If specified, this template will create orders with the same price"
msgstr ""
+"Falls angegeben, wird diese Vorlage Bestellungen mit dem gleichen Preis "
+"erzeugen"
-#: src/paths/instance/templates/list/Table.tsx:70
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
#, c-format
-msgid "add new templates"
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
msgstr ""
+"Dies bestimmt die Zeitdauer zur Bezahlung nach einer erfolgten Bestellung."
-#: src/paths/instance/templates/list/Table.tsx:142
+#: src/paths/instance/templates/update/index.tsx:90
#, c-format
-msgid "load more templates before the first one"
-msgstr ""
+msgid "Template (ID: %1$s) has been updated"
+msgstr "Die Vorlage (ID: %1$s) wurde aktualisiert"
-#: src/paths/instance/templates/list/Table.tsx:146
+#: src/paths/instance/templates/use/UsePage.tsx:58
#, c-format
-msgid "load newer templates"
-msgstr ""
+msgid "An amount is required"
+msgstr "Ein Betrag ist erforderlich"
-#: src/paths/instance/templates/list/Table.tsx:181
+#: src/paths/instance/templates/use/UsePage.tsx:60
#, c-format
-msgid "delete selected templates from the database"
-msgstr ""
+msgid "An order summary is required"
+msgstr "Eine Zusammenfassung der Bestellung ist erforderlich"
-#: src/paths/instance/templates/list/Table.tsx:188
+#: src/paths/instance/templates/use/UsePage.tsx:88
#, c-format
-msgid "use template to create new order"
-msgstr ""
+msgid "New order from template"
+msgstr "Neue Bestellung von Vorlage"
-#: src/paths/instance/templates/list/Table.tsx:195
+#: src/paths/instance/templates/use/UsePage.tsx:110
#, c-format
-msgid "create qr code for the template"
-msgstr ""
+msgid "Amount of the order"
+msgstr "Summe der Bestellung"
-#: src/paths/instance/templates/list/Table.tsx:210
+#: src/paths/instance/templates/use/UsePage.tsx:115
#, c-format
-msgid "load more templates after the last one"
+msgid "Order summary"
+msgstr "Zusammenfassung der Bestellung"
+
+#: src/paths/instance/templates/use/index.tsx:125
+#, c-format
+msgid "Could not create order from template"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:214
+#: src/paths/instance/token/DetailPage.tsx:57
+#, c-format
+msgid "You need your access token to perform the operation"
+msgstr "Sie benötigen Ihren Zugangstoken, um den Vorgang durchzuführen"
+
+#: src/paths/instance/token/DetailPage.tsx:74
+#, c-format
+msgid "You are updating the access token from instance with id \"%1$s\""
+msgstr "Sie erneuern Ihren Zugangstoken für die Instanz mit der ID \"%1$s\""
+
+#: src/paths/instance/token/DetailPage.tsx:105
#, c-format
-msgid "load older templates"
+msgid "This instance doesn't have authentication token."
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:231
+#: src/paths/instance/token/DetailPage.tsx:106
#, c-format
-msgid "There is no templates yet, add more pressing the + sign"
+msgid "You can leave it empty if there is another layer of security."
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:104
+#: src/paths/instance/token/DetailPage.tsx:121
+#, c-format
+msgid "Current access token"
+msgstr "Derzeitiger Zugangstoken"
+
+#: src/paths/instance/token/DetailPage.tsx:126
#, c-format
-msgid "template delete successfully"
+msgid "Clearing the access token will mean public access to the instance."
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:110
+#: src/paths/instance/token/DetailPage.tsx:142
+#, c-format
+msgid "Clear token"
+msgstr "Zugangstoken löschen"
+
+#: src/paths/instance/token/DetailPage.tsx:177
+#, c-format
+msgid "Confirm change"
+msgstr "Änderung bestätigen"
+
+#: src/paths/instance/token/index.tsx:83
#, c-format
-msgid "could not delete the template"
+msgid "Failed to clear token"
+msgstr "Es war nicht möglich, den/die Token zu löschen"
+
+#: src/paths/instance/token/index.tsx:109
+#, c-format
+msgid "Failed to set new token"
+msgstr "Es war nicht möglich, einen neuen Zugangstoken festzuschreiben"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
+#, c-format
+msgid "Slug"
msgstr ""
+"Slug (benutzer- und suchmaschinenfreundlicher Text als Bestandteil einer URL)"
-#: src/paths/instance/templates/update/index.tsx:90
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
#, c-format
-msgid "could not update template"
+msgid "Token family slug to use in URLs (for internal use only)"
+msgstr "Slug der Token-Familie zur Benutzung in URLs (nur für interne Zwecke)"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
+#, c-format
+msgid "Kind"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:57
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
#, c-format
-msgid "should be one of '%1$s'"
+msgid "Token family kind"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
#, c-format
-msgid "Webhook ID to use"
+msgid "User-readable token family name"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
#, c-format
-msgid "Event"
+msgid "Token family description for customers"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:90
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
#, c-format
-msgid "The event of the webhook: why the webhook is used"
+msgid "Valid After"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:94
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
#, c-format
-msgid "Method"
+msgid "Token family can issue tokens after this date"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
#, c-format
-msgid "Method used by the webhook"
+msgid "Valid Before"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
#, c-format
-msgid "URL"
+msgid "Token family can issue tokens until this date"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:100
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
#, c-format
-msgid "URL of the webhook where the customer will be redirected"
+msgid "Duration"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
#, c-format
-msgid "Header"
+msgid "Validity duration of a issued token"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:106
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
#, c-format
-msgid "Header template of the webhook"
+msgid "Token familty created successfully"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:111
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
#, c-format
-msgid "Body"
+msgid "Could not create token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:112
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
#, c-format
-msgid "Body template by the webhook"
+msgid "Token Families"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:61
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
#, c-format
-msgid "Webhooks"
+msgid "Add token family"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:66
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
#, c-format
-msgid "add new webhooks"
+msgid "Go to token family update page"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:137
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
+#, c-format
+msgid "Remove this token family from the database"
+msgstr "Diese Token aus der Datenbank entfernen"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
#, c-format
-msgid "load more webhooks before the first one"
+msgid ""
+"There are no token families yet, add the first one by pressing the + sign."
msgstr ""
+"Es sind noch keine Token-Familien angelegt. Sie können diese mit dem +-"
+"Zeichen hinzufügen."
-#: src/paths/instance/webhooks/list/Table.tsx:141
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
#, c-format
-msgid "load newer webhooks"
+msgid "Token family updated successfully"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:151
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
#, c-format
-msgid "Event type"
+msgid "Could not update the token family"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:176
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
#, c-format
-msgid "delete selected webhook from the database"
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:198
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
#, c-format
-msgid "load more webhooks after the last one"
+msgid "Failed to delete token family"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:202
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
#, c-format
-msgid "load older webhooks"
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:219
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
#, c-format
-msgid "There is no webhooks yet, add more pressing the + sign"
+msgid "Deleting a token family %1$s ."
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:94
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
#, c-format
-msgid "webhook delete successfully"
+msgid "Token Family: %1$s"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:100
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
#, c-format
-msgid "could not delete the webhook"
+msgid "Could not update token family"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:63
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
#, c-format
-msgid "check the id, does not look valid"
+msgid "Check the id, does not look valid"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:65
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
#, c-format
-msgid "should have 52 characters, current %1$s"
+msgid "Must have 52 characters, current %1$s"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:72
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
#, c-format
msgid "URL doesn't have the right format"
-msgstr ""
+msgstr "Die URL hat nicht das richtige Format"
-#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
#, c-format
msgid "Credited bank account"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
#, c-format
-msgid "Select one account"
-msgstr ""
+msgid "Select an account"
+msgstr "Wählen Sie ein Konto"
-#: src/paths/instance/transfers/create/CreatePage.tsx:101
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
#, c-format
msgid "Bank account of the merchant where the payment was received"
-msgstr ""
+msgstr "Bankkonto des Händlers mit Zahlungseingang"
-#: src/paths/instance/transfers/create/CreatePage.tsx:105
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
#, c-format
msgid "Wire transfer ID"
-msgstr ""
+msgstr "Überweisungs-ID"
-#: src/paths/instance/transfers/create/CreatePage.tsx:107
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
#, c-format
msgid ""
-"unique identifier of the wire transfer used by the exchange, must be 52 "
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
"characters long"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
+#, c-format
+msgid "Exchange URL"
+msgstr "URL des Zahlungsdienstleisters (Exchange-URL)"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
#, c-format
msgid ""
"Base URL of the exchange that made the transfer, should have been in the "
"wire transfer subject"
msgstr ""
+"Base URL des Zahlungsdienstleisters, der die Überweisung getätigt hat - "
+"diese sollte im Buchungsvermerk der Überweisung stehen"
-#: src/paths/instance/transfers/create/CreatePage.tsx:117
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
#, c-format
msgid "Amount credited"
-msgstr ""
+msgstr "Gutgeschriebener Betrag"
-#: src/paths/instance/transfers/create/CreatePage.tsx:118
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
#, c-format
msgid "Actual amount that was wired to the merchant's bank account"
msgstr ""
+"Tatsächlicher Betrag, der auf das Bankkonto des Verkäufers überwiesen wurde"
-#: src/paths/instance/transfers/create/index.tsx:58
+#: src/paths/instance/transfers/create/index.tsx:62
#, c-format
-msgid "could not inform transfer"
+msgid "Wire transfer informed successfully"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:61
+#: src/paths/instance/transfers/create/index.tsx:68
#, c-format
-msgid "Transfers"
+msgid "Could not inform transfer"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:66
+#: src/paths/instance/transfers/list/Table.tsx:62
#, c-format
-msgid "add new transfer"
+msgid "Transfers"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:129
+#: src/paths/instance/transfers/list/Table.tsx:67
#, c-format
-msgid "load more transfers before the first one"
-msgstr ""
+msgid "Add new transfer"
+msgstr "Neuen Transfer hinzufügen"
-#: src/paths/instance/transfers/list/Table.tsx:133
+#: src/paths/instance/transfers/list/Table.tsx:120
#, c-format
-msgid "load newer transfers"
+msgid "Load more transfers before the first one"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:143
+#: src/paths/instance/transfers/list/Table.tsx:133
#, c-format
msgid "Credit"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:152
+#: src/paths/instance/transfers/list/Table.tsx:136
#, c-format
msgid "Confirmed"
-msgstr ""
+msgstr "Bestätigt"
-#: src/paths/instance/transfers/list/Table.tsx:155
+#: src/paths/instance/transfers/list/Table.tsx:139
#, c-format
msgid "Verified"
-msgstr ""
+msgstr "Verifiziert"
+
+#: src/paths/instance/transfers/list/Table.tsx:142
+#, c-format
+msgid "Executed on"
+msgstr "Ausführungsdatum"
+
+#: src/paths/instance/transfers/list/Table.tsx:153
+#, c-format
+msgid "yes"
+msgstr "ja"
+
+#: src/paths/instance/transfers/list/Table.tsx:153
+#, c-format
+msgid "no"
+msgstr "nein"
#: src/paths/instance/transfers/list/Table.tsx:158
#, c-format
-msgid "Executed at"
+msgid "never"
+msgstr "nie"
+
+#: src/paths/instance/transfers/list/Table.tsx:163
+#, c-format
+msgid "unknown"
+msgstr "unbekannt"
+
+#: src/paths/instance/transfers/list/Table.tsx:169
+#, c-format
+msgid "Delete selected transfer from the database"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/instance/transfers/list/Table.tsx:184
#, c-format
-msgid "yes"
+msgid "Load more transfers after the last one"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/instance/transfers/list/Table.tsx:204
#, c-format
-msgid "no"
+msgid "There are no transfers yet, add more pressing the + sign"
msgstr ""
+"Es gibt noch keine Instanz. Sie können diese mit dem +-Zeichen hinzufügen"
-#: src/paths/instance/transfers/list/Table.tsx:181
+#: src/paths/instance/transfers/list/ListPage.tsx:83
#, c-format
-msgid "unknown"
+msgid "All accounts"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:187
+#: src/paths/instance/transfers/list/ListPage.tsx:84
#, c-format
-msgid "delete selected transfer from the database"
+msgid "Filter by account address"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:202
+#: src/paths/instance/transfers/list/ListPage.tsx:105
#, c-format
-msgid "load more transfer after the last one"
+msgid "Only show wire transfers confirmed by the merchant"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:206
+#: src/paths/instance/transfers/list/ListPage.tsx:115
#, c-format
-msgid "load older transfers"
+msgid "Only show wire transfers claimed by the exchange"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:223
+#: src/paths/instance/transfers/list/ListPage.tsx:118
#, c-format
-msgid "There is no transfer yet, add more pressing the + sign"
+msgid "Unverified"
+msgstr "Nicht verifiziert"
+
+#: src/paths/instance/transfers/list/index.tsx:118
+#, c-format
+msgid "Wire transfer \"%1$s...\" has been deleted"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:79
+#: src/paths/instance/transfers/list/index.tsx:123
#, c-format
-msgid "filter by account address"
+msgid "Failed to delete transfer"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:100
+#: src/paths/admin/create/CreatePage.tsx:86
#, c-format
-msgid "only show wire transfers confirmed by the merchant"
+msgid "Must be business or individual"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:110
+#: src/paths/admin/create/CreatePage.tsx:104
#, c-format
-msgid "only show wire transfers claimed by the exchange"
+msgid "Pay delay can't be greater than wire transfer delay"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:113
+#: src/paths/admin/create/CreatePage.tsx:112
#, c-format
-msgid "Unverified"
+msgid "Max 7 lines"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:69
+#: src/paths/admin/create/CreatePage.tsx:138
#, c-format
-msgid "is not valid"
+msgid "Doesn't match"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:94
+#: src/paths/admin/create/CreatePage.tsx:215
#, c-format
-msgid "is not a number"
+msgid "Enable access control"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:96
+#: src/paths/admin/create/CreatePage.tsx:216
#, c-format
-msgid "must be 1 or greater"
+msgid "Choose if the backend server should authenticate access."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:107
+#: src/paths/admin/create/CreatePage.tsx:243
#, c-format
-msgid "max 7 lines"
+msgid "Access control is not yet decided. This instance can't be created."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:178
+#: src/paths/admin/create/CreatePage.tsx:250
#, c-format
-msgid "change authorization configuration"
+msgid "Authorization must be handled externally."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:217
+#: src/paths/admin/create/CreatePage.tsx:256
+#, c-format
+msgid "Authorization is handled by the backend server."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:274
#, c-format
msgid "Need to complete marked fields and choose authorization method"
msgstr ""
+"Die gekennzeichneten Felder müssen ausgefüllt und eine Methode der "
+"Berechtigungsprüfung gewählt sein"
-#: src/components/form/InputPaytoForm.tsx:82
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
#, c-format
-msgid "This is not a valid bitcoin address."
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
msgstr ""
+"Name der Instanz in den URLs. Die Instanz „default“ ist reserviert, weil sie "
+"zum Verwalten der anderen Instanzen genutzt wird."
-#: src/components/form/InputPaytoForm.tsx:95
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "This is not a valid Ethereum address."
+msgid "Business name"
+msgstr "Name (von Geschäft, Firma oder Verkaufsort)"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
+#, c-format
+msgid "Legal name of the business represented by this instance."
msgstr ""
+"Offizieller Handelsname (des Geschäfts, der Firma oder des Verkaufsorts), "
+"welchen diese Instanz repräsentieren soll."
-#: src/components/form/InputPaytoForm.tsx:118
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
#, c-format
-msgid "IBAN numbers usually have more that 4 digits"
-msgstr "IBAN-Nummern haben normalerweise mehr als 4 Ziffern"
+msgid "Email"
+msgstr "E-Mail"
-#: src/components/form/InputPaytoForm.tsx:120
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
#, c-format
-msgid "IBAN numbers usually have less that 34 digits"
-msgstr "IBAN-Nummern haben normalerweise weniger als 34 Ziffern"
+msgid "Contact email"
+msgstr "E-Mail-Adresse für allgemeinen Kontakt"
-#: src/components/form/InputPaytoForm.tsx:128
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
#, c-format
-msgid "IBAN country code not found"
-msgstr "IBAN-Ländercode wurde nicht gefunden"
+msgid "Website URL"
+msgstr "Webseiten-URL"
-#: src/components/form/InputPaytoForm.tsx:153
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
#, c-format
-msgid "IBAN number is not valid, checksum is wrong"
-msgstr "IBAN-Nummer ist ungültig, die Prüfsumme ist falsch"
+msgid "URL."
+msgstr "URL."
-#: src/components/form/InputPaytoForm.tsx:248
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
#, c-format
-msgid "Target type"
-msgstr ""
+msgid "Logo"
+msgstr "Logo (Signet)"
-#: src/components/form/InputPaytoForm.tsx:249
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
#, c-format
-msgid "Method to use for wire transfer"
-msgstr ""
+msgid "Logo image."
+msgstr "Abbildung des Firmenlogos."
-#: src/components/form/InputPaytoForm.tsx:258
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
#, c-format
-msgid "Routing"
+msgid "Physical location of the merchant."
+msgstr "Niederlassung (Firmensitz) des Händlers oder Verkäufers."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
+#, c-format
+msgid "Jurisdiction"
+msgstr "Gerichtsstand"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#, c-format
+msgid "Jurisdiction for legal disputes with the merchant."
msgstr ""
+"Gerichtsstand für rechtliche Auseinandersetzungen mit dem Händler oder "
+"Verkäufer."
-#: src/components/form/InputPaytoForm.tsx:259
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
#, c-format
-msgid "Routing number."
+msgid "Pay transaction fee"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:263
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
#, c-format
-msgid "Account"
+msgid "Assume the cost of the transaction of let the user pay for it."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:264
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
#, c-format
-msgid "Account number."
+msgid "Default payment delay"
+msgstr "Normale Zahlungsfrist"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
+#, c-format
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
msgstr ""
+"Zeitraum, in dem Käufer normalerweise bezahlen, bevor das Angebot regulär "
+"verfällt."
-#: src/components/form/InputPaytoForm.tsx:273
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
#, c-format
-msgid "Business Identifier Code."
+msgid "Default wire transfer delay"
+msgstr "Gewöhnlicher Aufschub für Überweisungen"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#, c-format
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
msgstr ""
+"Zeitraum, in dem alle Kundenzahlungen zu einem Betrag zusammengefasst und "
+"vom Zahlungsdienstleister an das Bankkonto des Verkäufers überwiesen werden, "
+"um die Überweisungsgebühren zu reduzieren."
-#: src/components/form/InputPaytoForm.tsx:282
+#: src/paths/instance/update/UpdatePage.tsx:124
#, c-format
-msgid "Bank Account Number."
+msgid "Instance id"
+msgstr "Instanz-ID"
+
+#: src/paths/instance/update/index.tsx:108
+#, c-format
+msgid "Failed to update instance"
+msgstr "Es konnte die Instanz nicht aktualisiert werden"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
+#, c-format
+msgid "Must be \"pay\" or \"refund\""
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:292
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
#, c-format
-msgid "Unified Payment Interface."
+msgid "Must be one of '%1$s'"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:301
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
#, c-format
-msgid "Bitcoin protocol."
+msgid "Webhook ID to use"
+msgstr "zu verwendende Webhook-ID"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#, c-format
+msgid "Event"
+msgstr "Event"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
+#, c-format
+msgid "Pay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:310
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
#, c-format
-msgid "Ethereum protocol."
+msgid "The event of the webhook: why the webhook is used"
msgstr ""
+"Event (Anlass, Bedingung) für einen Webhook, um durch diesen nachfolgende "
+"Prozesse auszulösen"
-#: src/components/form/InputPaytoForm.tsx:319
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
#, c-format
-msgid "Interledger protocol."
+msgid "Method"
+msgstr "Methode"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
+#, c-format
+msgid "GET"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:328
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
#, c-format
-msgid "Host"
+msgid "POST"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:329
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
#, c-format
-msgid "Bank host."
+msgid "PUT"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:334
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
#, c-format
-msgid "Bank account."
+msgid "PATCH"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:343
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
#, c-format
-msgid "Bank account owner's name."
+msgid "HEAD"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:370
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
#, c-format
-msgid "No accounts yet."
+msgid "Method used by the webhook"
+msgstr "Methode, die der Webhook verwendet"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
+#, c-format
+msgid "URL"
+msgstr "URL"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
+#, c-format
+msgid "URL of the webhook where the customer will be redirected"
msgstr ""
+"URL des Webhooks, zu der die Käufer nach der Bezahlung weitergeleitet werden"
-#: src/components/instance/DefaultInstanceFormFields.tsx:52
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
#, c-format
msgid ""
-"Name of the instance in URLs. The 'default' instance is special in that it "
-"is used to administer other instances."
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:58
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
#, c-format
-msgid "Business name"
+msgid "For example %1$s will be replaced with the the order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
#, c-format
-msgid "Legal name of the business represented by this instance."
+msgid "The short list of variables are:"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:64
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
#, c-format
-msgid "Email"
+msgid "order's description"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:65
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
#, c-format
-msgid "Contact email"
-msgstr ""
+msgid "order's price"
+msgstr "Kosten der Bestellung"
-#: src/components/instance/DefaultInstanceFormFields.tsx:70
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
#, c-format
-msgid "Website URL"
+msgid "order's unique identification"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:71
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
#, c-format
-msgid "URL."
+msgid "the amount that was being refunded"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:76
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
#, c-format
-msgid "Logo"
+msgid "the reason entered by the merchant staff for granting the refund"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:77
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
#, c-format
-msgid "Logo image."
+msgid "time of the refund in nanoseconds since 1970"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:82
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
#, c-format
-msgid "Bank account"
+msgid "Http body"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:83
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
#, c-format
-msgid "URI specifying bank account for crediting revenue."
-msgstr ""
+msgid "Body template by the webhook"
+msgstr "Vorlage für den Webhook-Body"
-#: src/components/instance/DefaultInstanceFormFields.tsx:88
+#: src/paths/instance/webhooks/create/index.tsx:52
#, c-format
-msgid "Default max deposit fee"
+msgid "Webhook create successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:89
+#: src/paths/instance/webhooks/create/index.tsx:58
#, c-format
-msgid ""
-"Maximum deposit fees this merchant is willing to pay per order by default."
+msgid "Could not create the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#: src/paths/instance/webhooks/create/index.tsx:66
#, c-format
-msgid "Default max wire fee"
+msgid "Could not create webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:95
+#: src/paths/instance/webhooks/list/Table.tsx:57
#, c-format
-msgid ""
-"Maximum wire fees this merchant is willing to pay per wire transfer by "
-"default."
-msgstr ""
+msgid "Webhooks"
+msgstr "Webhooks"
-#: src/components/instance/DefaultInstanceFormFields.tsx:100
+#: src/paths/instance/webhooks/list/Table.tsx:62
#, c-format
-msgid "Default wire fee amortization"
+msgid "Add new webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#: src/paths/instance/webhooks/list/Table.tsx:117
#, c-format
-msgid ""
-"Number of orders excess wire transfer fees will be divided by to compute per "
-"order surcharge."
+msgid "Load more webhooks before the first one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#: src/paths/instance/webhooks/list/Table.tsx:130
#, c-format
-msgid "Physical location of the merchant."
-msgstr ""
+msgid "Event type"
+msgstr "Event-Typ"
-#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#: src/paths/instance/webhooks/list/Table.tsx:155
#, c-format
-msgid "Jurisdiction"
+msgid "Delete selected webhook from the database"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#: src/paths/instance/webhooks/list/Table.tsx:170
#, c-format
-msgid "Jurisdiction for legal disputes with the merchant."
+msgid "Load more webhooks after the last one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:122
+#: src/paths/instance/webhooks/list/Table.tsx:190
#, c-format
-msgid "Default payment delay"
+msgid "There are no webhooks yet, add more pressing the + sign"
msgstr ""
+"Es gibt noch keine Webhooks. Sie können diese mit dem +-Zeichen hinzufügen"
-#: src/components/instance/DefaultInstanceFormFields.tsx:124
+#: src/paths/instance/webhooks/list/index.tsx:88
#, c-format
-msgid ""
-"Time customers have to pay an order before the offer expires by default."
+msgid "Webhook delete successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:129
+#: src/paths/instance/webhooks/list/index.tsx:93
#, c-format
-msgid "Default wire transfer delay"
+msgid "Could not delete the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:130
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
#, c-format
-msgid ""
-"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
-"enabling it to aggregate smaller payments into larger wire transfers and "
-"reducing wire fees."
-msgstr ""
+msgid "Header"
+msgstr "Header"
-#: src/paths/instance/update/UpdatePage.tsx:164
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
#, c-format
-msgid "Instance id"
-msgstr ""
+msgid "Header template of the webhook"
+msgstr "Vorlage für den Webhook-Header"
-#: src/paths/instance/update/UpdatePage.tsx:173
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
#, c-format
-msgid "Change the authorization method use for this instance."
-msgstr ""
+msgid "Body"
+msgstr "Body"
-#: src/paths/instance/update/UpdatePage.tsx:182
+#: src/paths/instance/webhooks/update/index.tsx:88
#, c-format
-msgid "Manage access token"
+msgid "Webhook updated"
msgstr ""
-#: src/paths/instance/update/index.tsx:112
+#: src/paths/instance/webhooks/update/index.tsx:94
#, c-format
-msgid "Failed to create instance"
+msgid "Could not update webhook"
msgstr ""
-#: src/components/exception/login.tsx:74
+#: src/paths/settings/index.tsx:73
#, c-format
-msgid "Login required"
+msgid "Language"
msgstr ""
-#: src/components/exception/login.tsx:80
+#: src/paths/settings/index.tsx:89
#, c-format
-msgid "Please enter your access token."
+msgid "Advance order creation"
msgstr ""
-#: src/components/exception/login.tsx:108
+#: src/paths/settings/index.tsx:90
#, c-format
-msgid "Access Token"
+msgid "Shows more options in the order creation form"
msgstr ""
-#: src/InstanceRoutes.tsx:171
+#: src/paths/settings/index.tsx:94
#, c-format
-msgid "The request to the backend take too long and was cancelled"
+msgid "Advance instance settings"
msgstr ""
-#: src/InstanceRoutes.tsx:172
+#: src/paths/settings/index.tsx:95
#, c-format
-msgid "Diagnostic from %1$s is \"%2$s\""
+msgid "Shows more options in the instance settings form"
msgstr ""
-#: src/InstanceRoutes.tsx:178
+#: src/paths/settings/index.tsx:100
#, c-format
-msgid "The backend reported a problem: HTTP status #%1$s"
+msgid "Date format"
msgstr ""
-#: src/InstanceRoutes.tsx:179
+#: src/paths/settings/index.tsx:118
#, c-format
-msgid "Diagnostic from %1$s is '%2$s'"
+msgid "How the date is going to be displayed"
msgstr ""
-#: src/InstanceRoutes.tsx:196
+#: src/paths/settings/index.tsx:121
#, c-format
-msgid "Access denied"
+msgid "Developer mode"
msgstr ""
-#: src/InstanceRoutes.tsx:197
+#: src/paths/settings/index.tsx:122
#, c-format
-msgid "The access token provided is invalid."
+msgid ""
+"Shows more options and tools which are not intended for general audience."
msgstr ""
-#: src/InstanceRoutes.tsx:212
+#: src/paths/instance/categories/list/Table.tsx:133
#, c-format
-msgid "No 'default' instance configured yet."
+msgid "Total products"
+msgstr "Gesamte Artikelmenge"
+
+#: src/paths/instance/categories/list/Table.tsx:164
+#, c-format
+msgid "Delete selected category from the database"
msgstr ""
-#: src/InstanceRoutes.tsx:213
+#: src/paths/instance/categories/list/Table.tsx:199
#, c-format
-msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgid "There are no categories yet, add more pressing the + sign"
msgstr ""
+"Es gibt noch keine Kategorien. Sie können diese mit dem +-Zeichen hinzufügen"
-#: src/InstanceRoutes.tsx:630
+#: src/paths/instance/categories/list/index.tsx:90
#, c-format
-msgid "The access token provided is invalid"
+msgid "Category delete successfully"
msgstr ""
-#: src/InstanceRoutes.tsx:664
+#: src/paths/instance/categories/list/index.tsx:95
#, c-format
-msgid "Hide for today"
+msgid "Could not delete the category"
msgstr ""
-#: src/components/menu/SideBar.tsx:82
+#: src/paths/instance/categories/create/CreatePage.tsx:75
#, c-format
-msgid "Instance"
+msgid "Category name"
msgstr ""
-#: src/components/menu/SideBar.tsx:91
+#: src/paths/instance/categories/create/index.tsx:53
#, c-format
-msgid "Settings"
+msgid "Category added successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:167
+#: src/paths/instance/categories/create/index.tsx:59
#, c-format
-msgid "Connection"
+msgid "Could not add category"
msgstr ""
-#: src/components/menu/SideBar.tsx:209
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
#, c-format
-msgid "New"
+msgid "Id:"
msgstr ""
-#: src/components/menu/SideBar.tsx:219
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
#, c-format
-msgid "List"
+msgid "Name of the category"
msgstr ""
-#: src/components/menu/SideBar.tsx:234
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
#, c-format
-msgid "Log out"
+msgid "Products"
+msgstr "Artikel"
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
+#, c-format
+msgid "Search by product description or id"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:71
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
#, c-format
-msgid "Check your token is valid"
+msgid "Products that this category will list."
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:90
+#: src/paths/instance/categories/update/index.tsx:93
#, c-format
-msgid "Couldn't access the server."
+msgid "Could not update category"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:91
+#: src/paths/instance/categories/update/index.tsx:95
#, c-format
-msgid "Could not infer instance id from url %1$s"
+msgid "Category id is unknown"
msgstr ""
-#: src/Application.tsx:104
+#: src/Routing.tsx:665
#, c-format
-msgid "Server not found"
+msgid "Without this the merchant backend will refuse to create new orders."
msgstr ""
-#: src/Application.tsx:118
+#: src/Routing.tsx:675
+#, c-format
+msgid "Hide for today"
+msgstr "Für heute nicht anzeigen"
+
+#: src/Routing.tsx:711
#, c-format
-msgid "Server response with an error code"
+msgid "KYC verification needed"
msgstr ""
-#: src/Application.tsx:120
+#: src/Routing.tsx:715
#, c-format
-msgid "Got message %1$s from %2$s"
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
msgstr ""
-#: src/Application.tsx:131
+#: src/components/menu/SideBar.tsx:167
+#, c-format
+msgid "Configuration"
+msgstr "Einstellungen"
+
+#: src/components/menu/SideBar.tsx:206
#, c-format
-msgid "Response from server is unreadable, http status: %1$s"
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: src/components/menu/SideBar.tsx:216
+#, c-format
+msgid "Access token"
+msgstr "Zugangstoken"
+
+#: src/components/menu/SideBar.tsx:224
+#, c-format
+msgid "Connection"
+msgstr "Verbindung"
+
+#: src/components/menu/SideBar.tsx:233
+#, c-format
+msgid "Interface"
msgstr ""
-#: src/Application.tsx:144
+#: src/components/menu/SideBar.tsx:274
+#, c-format
+msgid "List"
+msgstr "Auflisten"
+
+#: src/components/menu/SideBar.tsx:293
+#, c-format
+msgid "Log out"
+msgstr "Abmelden"
+
+#: src/paths/admin/create/index.tsx:54
#, c-format
-msgid "Unexpected Error"
+msgid "Failed to create instance"
+msgstr "Das Erzeugen der Instanz ist fehlgeschlagen"
+
+#: src/Application.tsx:208
+#, c-format
+msgid "checking compatibility with server..."
msgstr ""
-#: src/components/form/InputArray.tsx:101
+#: src/Application.tsx:217
#, c-format
-msgid "The value %1$s is invalid for a payment url"
+msgid "Contacting the server failed"
msgstr ""
-#: src/components/form/InputArray.tsx:110
+#: src/Application.tsx:229
#, c-format
-msgid "add element to the list"
+msgid "The server version is not supported"
msgstr ""
-#: src/components/form/InputArray.tsx:112
+#: src/Application.tsx:230
#, c-format
-msgid "add"
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
msgstr ""
#: src/components/form/InputSecured.tsx:37
#, c-format
msgid "Deleting"
-msgstr ""
+msgstr "löscht…"
#: src/components/form/InputSecured.tsx:41
#, c-format
msgid "Changing"
+msgstr "ändern…"
+
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr "Zugangstoken verwalten"
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, c-format
+msgid "Business Name"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:87
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
#, c-format
msgid "Order ID"
-msgstr ""
+msgstr "Nummer der Bestellung"
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:101
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
#, c-format
msgid "Payment URL"
-msgstr ""
+msgstr "Zahlungs-URL (Payment URL)"
+
+#, c-format
+#~ msgid "To short"
+#~ msgstr "Zu kurz"
+
+#, c-format
+#~ msgid "With authentication"
+#~ msgstr "Mit Authentifizierung"
+
+#, c-format
+#~ msgid "Timed out"
+#~ msgstr "Zeitüberschreitung"
+
+#, c-format
+#~ msgid "Target account"
+#~ msgstr "Zielkonto"
+
+#, c-format
+#~ msgid "There is an anti-money laundering process pending to complete."
+#~ msgstr ""
+#~ "Ein Vorgang zur Prüfung auf Geldwäsche ist noch nicht abgeschlossen."
diff --git a/packages/merchant-backoffice-ui/src/i18n/en.po b/packages/merchant-backoffice-ui/src/i18n/en.po
index d8d0bae29..3c19bd0b8 100644
--- a/packages/merchant-backoffice-ui/src/i18n/en.po
+++ b/packages/merchant-backoffice-ui/src/i18n/en.po
@@ -27,154 +27,445 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/components/modal/index.tsx:71
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr ""
+
+#: src/components/modal/index.tsx:81
#, c-format
msgid "Cancel"
msgstr ""
-#: src/components/modal/index.tsx:79
+#: src/components/modal/index.tsx:89
#, c-format
msgid "%1$s"
msgstr ""
-#: src/components/modal/index.tsx:84
+#: src/components/modal/index.tsx:94
#, c-format
msgid "Close"
msgstr ""
-#: src/components/modal/index.tsx:124
+#: src/components/modal/index.tsx:134
#, c-format
msgid "Continue"
msgstr ""
-#: src/components/modal/index.tsx:178
+#: src/components/modal/index.tsx:194
#, c-format
msgid "Clear"
msgstr ""
-#: src/components/modal/index.tsx:190
+#: src/components/modal/index.tsx:206
#, c-format
msgid "Confirm"
msgstr ""
-#: src/components/modal/index.tsx:296
+#: src/components/modal/index.tsx:248
#, c-format
-msgid "is not the same as the current access token"
+msgid "Required"
msgstr ""
-#: src/components/modal/index.tsx:299
+#: src/components/modal/index.tsx:250
#, c-format
-msgid "cannot be empty"
+msgid "Letter must be a JSON string"
msgstr ""
-#: src/components/modal/index.tsx:301
+#: src/components/modal/index.tsx:252
#, c-format
-msgid "cannot be the same as the old token"
+msgid "JSON string is invalid"
msgstr ""
-#: src/components/modal/index.tsx:305
+#: src/components/modal/index.tsx:257
#, c-format
-msgid "is not the same"
+msgid "Import"
msgstr ""
-#: src/components/modal/index.tsx:315
+#: src/components/modal/index.tsx:258
#, c-format
-msgid "You are updating the access token from instance with id %1$s"
+msgid "Importing an account from the bank"
msgstr ""
-#: src/components/modal/index.tsx:331
+#: src/components/modal/index.tsx:265
#, c-format
-msgid "Old access token"
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
msgstr ""
-#: src/components/modal/index.tsx:332
+#: src/components/modal/index.tsx:273
#, c-format
-msgid "access token currently in use"
+msgid "Account information"
msgstr ""
#: src/components/modal/index.tsx:338
#, c-format
-msgid "New access token"
+msgid "Correct form"
msgstr ""
#: src/components/modal/index.tsx:339
#, c-format
-msgid "next access token to be used"
+msgid "Comparing account details"
+msgstr ""
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr ""
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr ""
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr ""
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr ""
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr ""
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr ""
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr ""
+
+#: src/components/modal/index.tsx:402
+#, c-format
+msgid "Account id"
+msgstr ""
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr ""
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr ""
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
msgstr ""
-#: src/components/modal/index.tsx:344
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr ""
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr ""
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr ""
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
+msgstr ""
+
+#: src/components/modal/index.tsx:487
+#, c-format
+msgid "Step 1:"
+msgstr ""
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
+msgstr ""
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr ""
+
+#: src/components/modal/index.tsx:499
+#, c-format
+msgid "Step 2:"
+msgstr ""
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
+msgstr ""
+
+#: src/components/modal/index.tsx:509
+#, c-format
+msgid "Receiver name"
+msgstr ""
+
+#: src/components/modal/index.tsx:514
+#, c-format
+msgid "Step 3:"
+msgstr ""
+
+#: src/components/modal/index.tsx:516
+#, c-format
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
+msgstr ""
+
+#: src/components/modal/index.tsx:536
+#, c-format
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
+msgstr ""
+
+#: src/components/modal/index.tsx:549
+#, c-format
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
+msgstr ""
+
+#: src/components/modal/index.tsx:694
+#, c-format
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
+msgstr ""
+
+#: src/components/modal/index.tsx:701
+#, c-format
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
+msgstr ""
+
+#: src/components/modal/index.tsx:708
+#, c-format
+msgid "Deleting an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
+msgstr ""
+
+#: src/components/modal/index.tsx:743
+#, c-format
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
+msgstr ""
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:786
+#, c-format
+msgid "Is not the same as the current access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:791
+#, c-format
+msgid "Can't be the same as the old token"
+msgstr ""
+
+#: src/components/modal/index.tsx:795
+#, c-format
+msgid "Is not the same"
+msgstr ""
+
+#: src/components/modal/index.tsx:803
+#, c-format
+msgid "You are updating the access token for the instance with id %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:819
+#, c-format
+msgid "Old access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:820
+#, c-format
+msgid "Access token currently in use"
+msgstr ""
+
+#: src/components/modal/index.tsx:826
+#, c-format
+msgid "New access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:827
+#, c-format
+msgid "Next access token to be used"
+msgstr ""
+
+#: src/components/modal/index.tsx:832
#, c-format
msgid "Repeat access token"
msgstr ""
-#: src/components/modal/index.tsx:345
+#: src/components/modal/index.tsx:833
#, c-format
-msgid "confirm the same access token"
+msgid "Confirm the same access token"
msgstr ""
-#: src/components/modal/index.tsx:350
+#: src/components/modal/index.tsx:838
#, c-format
msgid "Clearing the access token will mean public access to the instance"
msgstr ""
-#: src/components/modal/index.tsx:377
+#: src/components/modal/index.tsx:865
#, c-format
-msgid "cannot be the same as the old access token"
+msgid "Can't be the same as the old access token"
msgstr ""
-#: src/components/modal/index.tsx:394
+#: src/components/modal/index.tsx:880
#, c-format
msgid "You are setting the access token for the new instance"
msgstr ""
-#: src/components/modal/index.tsx:420
+#: src/components/modal/index.tsx:906
#, c-format
msgid ""
"With external authorization method no check will be done by the merchant "
"backend"
msgstr ""
-#: src/components/modal/index.tsx:436
+#: src/components/modal/index.tsx:922
#, c-format
msgid "Set external authorization"
msgstr ""
-#: src/components/modal/index.tsx:448
+#: src/components/modal/index.tsx:934
#, c-format
msgid "Set access token"
msgstr ""
-#: src/components/modal/index.tsx:470
+#: src/components/modal/index.tsx:956
#, c-format
msgid "Operation in progress..."
msgstr ""
-#: src/components/modal/index.tsx:479
+#: src/components/modal/index.tsx:965
#, c-format
msgid "The operation will be automatically canceled after %1$s seconds"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:80
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr ""
+
+#: src/paths/login/index.tsx:70
+#, c-format
+msgid "Your instance cannot be found"
+msgstr ""
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr ""
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr ""
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:79
#, c-format
msgid "Instances"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:93
+#: src/paths/admin/list/TableActive.tsx:92
#, c-format
msgid "Delete"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:99
+#: src/paths/admin/list/TableActive.tsx:98
#, c-format
-msgid "add new instance"
+msgid "Add new instance"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:178
+#: src/paths/admin/list/TableActive.tsx:175
#, c-format
msgid "ID"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:181
+#: src/paths/admin/list/TableActive.tsx:178
#, c-format
msgid "Name"
msgstr ""
@@ -191,132 +482,588 @@ msgstr ""
#: src/paths/admin/list/TableActive.tsx:261
#, c-format
-msgid "There is no instances yet, add more pressing the + sign"
+msgid "There are no instances yet, add more pressing the + sign"
msgstr ""
-#: src/paths/admin/list/View.tsx:68
+#: src/paths/admin/list/View.tsx:66
#, c-format
msgid "Only show active instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:71
+#: src/paths/admin/list/View.tsx:69
#, c-format
msgid "Active"
msgstr ""
-#: src/paths/admin/list/View.tsx:78
+#: src/paths/admin/list/View.tsx:76
#, c-format
msgid "Only show deleted instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:81
+#: src/paths/admin/list/View.tsx:79
#, c-format
msgid "Deleted"
msgstr ""
-#: src/paths/admin/list/View.tsx:88
+#: src/paths/admin/list/View.tsx:86
#, c-format
msgid "Show all instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:91
+#: src/paths/admin/list/View.tsx:89
#, c-format
msgid "All"
msgstr ""
-#: src/paths/admin/list/index.tsx:101
+#: src/paths/admin/list/index.tsx:100
#, c-format
msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/admin/list/index.tsx:106
+#: src/paths/admin/list/index.tsx:105
#, c-format
msgid "Failed to delete instance"
msgstr ""
-#: src/paths/admin/list/index.tsx:124
+#: src/paths/admin/list/index.tsx:140
#, c-format
-msgid "Instance '%1$s' (ID: %2$s) has been disabled"
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
msgstr ""
-#: src/paths/admin/list/index.tsx:129
+#: src/paths/admin/list/index.tsx:145
#, c-format
msgid "Failed to purge instance"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:41
+#: src/components/exception/AsyncButton.tsx:43
#, c-format
-msgid "Pending KYC verification"
+msgid "Loading..."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:66
+#: src/components/form/InputPaytoForm.tsx:86
#, c-format
-msgid "Timed out"
+msgid "This is not a valid bitcoin address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:103
+#: src/components/form/InputPaytoForm.tsx:99
#, c-format
-msgid "Exchange"
+msgid "This is not a valid Ethereum address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:106
+#: src/components/form/InputPaytoForm.tsx:128
#, c-format
-msgid "Target account"
+msgid "This is not a valid host."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:109
+#: src/components/form/InputPaytoForm.tsx:151
#, c-format
-msgid "KYC URL"
+msgid "IBAN numbers usually have more that 4 digits"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:144
+#: src/components/form/InputPaytoForm.tsx:153
+#, c-format
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:330
#, c-format
msgid "Code"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:147
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, c-format
+msgid "International Bank Account Number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, c-format
+msgid "Invalid url"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, c-format
+msgid "Auth type"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, c-format
+msgid "With token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, c-format
+msgid "Do not change"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, c-format
+msgid "Not verified"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, c-format
+msgid "Confirm operation"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, c-format
+msgid "Account details"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr ""
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, c-format
+msgid "Could not create account"
+msgstr ""
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr ""
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, c-format
+msgid "Bank accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, c-format
+msgid "Add new account"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, c-format
+msgid "Wire method: Bitcoin"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, c-format
+msgid "Delete selected accounts from the database"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, c-format
+msgid "Wire method: x-taler-bank"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, c-format
+msgid "Account name"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, c-format
+msgid "Wire method: IBAN"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, c-format
+msgid "Other accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format
+msgid "Reason"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:140
+#, c-format
+msgid "The exchange require a account verification."
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
#, c-format
msgid "Http Status"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:177
+#: src/paths/instance/kyc/list/ListPage.tsx:199
#, c-format
msgid "No pending kyc verification!"
msgstr ""
-#: src/components/form/InputDate.tsx:123
+#: src/components/form/InputDate.tsx:127
#, c-format
-msgid "change value to unknown date"
+msgid "Change value to unknown date"
msgstr ""
-#: src/components/form/InputDate.tsx:124
+#: src/components/form/InputDate.tsx:128
#, c-format
-msgid "change value to empty"
+msgid "Change value to empty"
msgstr ""
-#: src/components/form/InputDate.tsx:131
+#: src/components/form/InputDate.tsx:140
#, c-format
-msgid "clear"
+msgid "Change value to never"
msgstr ""
-#: src/components/form/InputDate.tsx:136
+#: src/components/form/InputDate.tsx:145
#, c-format
-msgid "change value to never"
+msgid "Never"
msgstr ""
-#: src/components/form/InputDate.tsx:141
+#: src/components/picker/DurationPicker.tsx:55
#, c-format
-msgid "never"
+msgid "days"
msgstr ""
-#: src/components/form/InputLocation.tsx:29
+#: src/components/picker/DurationPicker.tsx:65
#, c-format
-msgid "Country"
+msgid "hours"
msgstr ""
-#: src/components/form/InputLocation.tsx:33
+#: src/components/picker/DurationPicker.tsx:76
#, c-format
-msgid "Address"
+msgid "minutes"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:62
+#, c-format
+msgid "Forever"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr ""
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
msgstr ""
#: src/components/form/InputLocation.tsx:39
@@ -359,126 +1106,141 @@ msgstr ""
msgid "Country subdivision"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:66
-#, c-format
-msgid "Product id"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:69
+#: src/components/form/InputSearchOnList.tsx:80
#, c-format
msgid "Description"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:94
-#, c-format
-msgid "Product"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:95
+#: src/components/form/InputSearchOnList.tsx:106
#, c-format
-msgid "search products by it's description or id"
+msgid "Enter description or id"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:151
+#: src/components/form/InputSearchOnList.tsx:164
#, c-format
-msgid "no products found with that description"
+msgid "no match found with that description or id"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:56
+#: src/components/product/InventoryProductForm.tsx:57
#, c-format
msgid "You must enter a valid product identifier."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:64
+#: src/components/product/InventoryProductForm.tsx:65
#, c-format
msgid "Quantity must be greater than 0!"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:76
+#: src/components/product/InventoryProductForm.tsx:77
#, c-format
msgid ""
"This quantity exceeds remaining stock. Currently, only %1$s units remain "
"unreserved in stock."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:109
+#: src/components/product/InventoryProductForm.tsx:100
+#, c-format
+msgid "Search product"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:112
#, c-format
msgid "Quantity"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:110
+#: src/components/product/InventoryProductForm.tsx:113
#, c-format
-msgid "how many products will be added"
+msgid "How many products will be added"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:117
+#: src/components/product/InventoryProductForm.tsx:120
#, c-format
msgid "Add from inventory"
msgstr ""
-#: src/components/form/InputImage.tsx:105
+#: src/components/form/InputImage.tsx:107
#, c-format
-msgid "Image should be smaller than 1 MB"
+msgid "Image must be smaller than 1 MB"
msgstr ""
-#: src/components/form/InputImage.tsx:110
+#: src/components/form/InputImage.tsx:112
#, c-format
msgid "Add"
msgstr ""
-#: src/components/form/InputImage.tsx:115
+#: src/components/form/InputImage.tsx:122
#, c-format
msgid "Remove"
msgstr ""
-#: src/components/form/InputTaxes.tsx:113
+#: src/components/form/InputTaxes.tsx:47
+#, c-format
+msgid "Invalid"
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:103
#, c-format
msgid "No taxes configured for this product."
msgstr ""
-#: src/components/form/InputTaxes.tsx:119
+#: src/components/form/InputTaxes.tsx:109
#, c-format
msgid "Amount"
msgstr ""
-#: src/components/form/InputTaxes.tsx:120
+#: src/components/form/InputTaxes.tsx:110
#, c-format
msgid ""
"Taxes can be in currencies that differ from the main currency used by the "
"merchant."
msgstr ""
-#: src/components/form/InputTaxes.tsx:122
+#: src/components/form/InputTaxes.tsx:112
#, c-format
msgid ""
"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
msgstr ""
-#: src/components/form/InputTaxes.tsx:131
+#: src/components/form/InputTaxes.tsx:121
#, c-format
msgid "Legal name of the tax, e.g. VAT or import duties."
msgstr ""
-#: src/components/form/InputTaxes.tsx:137
+#: src/components/form/InputTaxes.tsx:127
#, c-format
-msgid "add tax to the tax list"
+msgid "Add tax to the tax list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:72
+#: src/components/product/NonInventoryProductForm.tsx:71
#, c-format
-msgid "describe and add a product that is not in the inventory list"
+msgid "Describe and add a product that is not in the inventory list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:75
+#: src/components/product/NonInventoryProductForm.tsx:74
#, c-format
msgid "Add custom product"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:86
+#: src/components/product/NonInventoryProductForm.tsx:85
#, c-format
msgid "Complete information of the product"
msgstr ""
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, c-format
+msgid "Must be a number"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, c-format
+msgid "Must be grater than 0"
+msgstr ""
+
#: src/components/product/NonInventoryProductForm.tsx:185
#, c-format
msgid "Image"
@@ -486,12 +1248,12 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:186
#, c-format
-msgid "photo of the product"
+msgid "Photo of the product."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:192
#, c-format
-msgid "full product description"
+msgid "Full product description."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:196
@@ -501,7 +1263,7 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:197
#, c-format
-msgid "name of the product unit"
+msgid "Name of the product unit."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:201
@@ -511,796 +1273,863 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:202
#, c-format
-msgid "amount in the current currency"
-msgstr ""
-
-#: src/components/product/NonInventoryProductForm.tsx:211
-#, c-format
-msgid "Taxes"
-msgstr ""
-
-#: src/components/product/ProductList.tsx:38
-#, c-format
-msgid "image"
+msgid "Amount in the current currency."
msgstr ""
-#: src/components/product/ProductList.tsx:41
+#: src/components/product/NonInventoryProductForm.tsx:208
#, c-format
-msgid "description"
+msgid "How many products will be added."
msgstr ""
-#: src/components/product/ProductList.tsx:44
+#: src/components/product/NonInventoryProductForm.tsx:211
#, c-format
-msgid "quantity"
+msgid "Taxes"
msgstr ""
-#: src/components/product/ProductList.tsx:47
+#: src/components/product/ProductList.tsx:46
#, c-format
-msgid "unit price"
+msgid "Unit price"
msgstr ""
-#: src/components/product/ProductList.tsx:50
+#: src/components/product/ProductList.tsx:49
#, c-format
-msgid "total price"
+msgid "Total price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:153
+#: src/paths/instance/orders/create/CreatePage.tsx:162
#, c-format
-msgid "required"
+msgid "Must be greater than 0"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:157
+#: src/paths/instance/orders/create/CreatePage.tsx:173
#, c-format
-msgid "not valid"
+msgid "Refund deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:159
+#: src/paths/instance/orders/create/CreatePage.tsx:179
#, c-format
-msgid "must be greater than 0"
+msgid "Wire transfer deadline can't be before refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:164
+#: src/paths/instance/orders/create/CreatePage.tsx:188
#, c-format
-msgid "not a valid json"
+msgid "Wire transfer deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:170
+#: src/paths/instance/orders/create/CreatePage.tsx:196
#, c-format
-msgid "should be in the future"
+msgid "Must have a refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:173
+#: src/paths/instance/orders/create/CreatePage.tsx:201
#, c-format
-msgid "refund deadline cannot be before pay deadline"
+msgid "Auto refund can't be after refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:179
+#: src/paths/instance/orders/create/CreatePage.tsx:208
#, c-format
-msgid "wire transfer deadline cannot be before refund deadline"
+msgid "Must be in the future"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:190
+#: src/paths/instance/orders/create/CreatePage.tsx:376
#, c-format
-msgid "wire transfer deadline cannot be before pay deadline"
+msgid "Simple"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:197
+#: src/paths/instance/orders/create/CreatePage.tsx:388
#, c-format
-msgid "should have a refund deadline"
+msgid "Advanced"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:202
+#: src/paths/instance/orders/create/CreatePage.tsx:400
#, c-format
-msgid "auto refund cannot be after refund deadline"
+msgid "Manage products in order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:360
+#: src/paths/instance/orders/create/CreatePage.tsx:404
#, c-format
-msgid "Manage products in order"
+msgid "%1$s products with a total price of %2$s."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:369
+#: src/paths/instance/orders/create/CreatePage.tsx:411
#, c-format
msgid "Manage list of products in the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:391
+#: src/paths/instance/orders/create/CreatePage.tsx:435
#, c-format
msgid "Remove this product from the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:415
-#, c-format
-msgid "Total price"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:417
+#: src/paths/instance/orders/create/CreatePage.tsx:461
#, c-format
-msgid "total product price added up"
+msgid "Total product price added up"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:430
+#: src/paths/instance/orders/create/CreatePage.tsx:474
#, c-format
msgid "Amount to be paid by the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:436
+#: src/paths/instance/orders/create/CreatePage.tsx:480
#, c-format
msgid "Order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:437
+#: src/paths/instance/orders/create/CreatePage.tsx:481
#, c-format
-msgid "final order price"
+msgid "Final order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:444
+#: src/paths/instance/orders/create/CreatePage.tsx:488
#, c-format
msgid "Summary"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:445
+#: src/paths/instance/orders/create/CreatePage.tsx:489
#, c-format
msgid "Title of the order to be shown to the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:450
+#: src/paths/instance/orders/create/CreatePage.tsx:495
#, c-format
-msgid "Shipping and Fulfillment"
+msgid "Shipping and fulfillment"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:455
+#: src/paths/instance/orders/create/CreatePage.tsx:500
#, c-format
msgid "Delivery date"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:456
+#: src/paths/instance/orders/create/CreatePage.tsx:501
#, c-format
msgid "Deadline for physical delivery assured by the merchant."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:461
+#: src/paths/instance/orders/create/CreatePage.tsx:506
#, c-format
msgid "Location"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:462
+#: src/paths/instance/orders/create/CreatePage.tsx:507
#, c-format
-msgid "address where the products will be delivered"
+msgid "Address where the products will be delivered"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:469
+#: src/paths/instance/orders/create/CreatePage.tsx:514
#, c-format
msgid "Fulfillment URL"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:470
+#: src/paths/instance/orders/create/CreatePage.tsx:515
#, c-format
msgid "URL to which the user will be redirected after successful payment."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:476
+#: src/paths/instance/orders/create/CreatePage.tsx:523
#, c-format
msgid "Taler payment options"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:477
+#: src/paths/instance/orders/create/CreatePage.tsx:524
#, c-format
msgid "Override default Taler payment settings for this order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:481
+#: src/paths/instance/orders/create/CreatePage.tsx:529
#, c-format
-msgid "Payment deadline"
+msgid "Payment time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:482
+#: src/paths/instance/orders/create/CreatePage.tsx:535
#, c-format
msgid ""
-"Deadline for the customer to pay for the offer before it expires. Inventory "
-"products will be reserved until this deadline."
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:486
+#: src/paths/instance/orders/create/CreatePage.tsx:552
#, c-format
-msgid "Refund deadline"
+msgid "Default"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:487
+#: src/paths/instance/orders/create/CreatePage.tsx:561
#, c-format
-msgid "Time until which the order can be refunded by the merchant."
+msgid "Refund time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:491
-#, c-format
-msgid "Wire transfer deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:492
-#, c-format
-msgid "Deadline for the exchange to make the wire transfer."
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:496
-#, c-format
-msgid "Auto-refund deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:497
+#: src/paths/instance/orders/create/CreatePage.tsx:569
#, c-format
msgid ""
-"Time until which the wallet will automatically check for refunds without "
-"user interaction."
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:502
+#: src/paths/instance/orders/create/CreatePage.tsx:594
#, c-format
-msgid "Maximum deposit fee"
+msgid "Wire transfer time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:503
+#: src/paths/instance/orders/create/CreatePage.tsx:602
#, c-format
msgid ""
-"Maximum deposit fees the merchant is willing to cover for this order. Higher "
-"deposit fees must be covered in full by the consumer."
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:507
+#: src/paths/instance/orders/create/CreatePage.tsx:628
#, c-format
-msgid "Maximum wire fee"
+msgid "Auto-refund time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:508
+#: src/paths/instance/orders/create/CreatePage.tsx:634
#, c-format
msgid ""
-"Maximum aggregate wire fees the merchant is willing to cover for this order. "
-"Wire fees exceeding this amount are to be covered by the customers."
+"Time until which the wallet will automatically check for refunds without "
+"user interaction."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:512
+#: src/paths/instance/orders/create/CreatePage.tsx:642
#, c-format
-msgid "Wire fee amortization"
+msgid "Maximum fee"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:513
+#: src/paths/instance/orders/create/CreatePage.tsx:643
#, c-format
msgid ""
-"Factor by which wire fees exceeding the above threshold are divided to "
-"determine the share of excess wire fees to be paid explicitly by the "
-"consumer."
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:517
+#: src/paths/instance/orders/create/CreatePage.tsx:649
#, c-format
msgid "Create token"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:518
+#: src/paths/instance/orders/create/CreatePage.tsx:650
#, c-format
msgid ""
-"Uncheck this option if the merchant backend generated an order ID with "
-"enough entropy to prevent adversarial claims."
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:522
+#: src/paths/instance/orders/create/CreatePage.tsx:656
#, c-format
msgid "Minimum age required"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:523
+#: src/paths/instance/orders/create/CreatePage.tsx:657
#, c-format
msgid ""
"Any value greater than 0 will limit the coins able be used to pay this "
"contract. If empty the age restriction will be defined by the products"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:526
+#: src/paths/instance/orders/create/CreatePage.tsx:660
#, c-format
msgid "Min age defined by the producs is %1$s"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:534
+#: src/paths/instance/orders/create/CreatePage.tsx:661
+#, c-format
+msgid "No product with age restriction in this order"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:671
#, c-format
msgid "Additional information"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:535
+#: src/paths/instance/orders/create/CreatePage.tsx:672
#, c-format
msgid "Custom information to be included in the contract for this order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:541
+#: src/paths/instance/orders/create/CreatePage.tsx:681
#, c-format
msgid "You must enter a value in JavaScript Object Notation (JSON)."
msgstr ""
-#: src/components/picker/DurationPicker.tsx:55
+#: src/paths/instance/orders/create/CreatePage.tsx:707
#, c-format
-msgid "days"
+msgid "Custom field name"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:65
+#: src/paths/instance/orders/create/CreatePage.tsx:793
#, c-format
-msgid "hours"
+msgid "Disabled"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:76
+#: src/paths/instance/orders/create/CreatePage.tsx:796
#, c-format
-msgid "minutes"
+msgid "No deadline"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:87
+#: src/paths/instance/orders/create/CreatePage.tsx:797
#, c-format
-msgid "seconds"
+msgid "Deadline at %1$s"
msgstr ""
-#: src/components/form/InputDuration.tsx:53
+#: src/paths/instance/orders/create/index.tsx:109
#, c-format
-msgid "forever"
+msgid "Could not create order"
msgstr ""
-#: src/components/form/InputDuration.tsx:62
+#: src/paths/instance/orders/create/index.tsx:111
#, c-format
-msgid "%1$sM"
+msgid "No exchange would accept a payment because of KYC requirements."
msgstr ""
-#: src/components/form/InputDuration.tsx:64
+#: src/paths/instance/orders/create/index.tsx:129
#, c-format
-msgid "%1$sY"
+msgid "No more stock for product with ID \"%1$s\"."
msgstr ""
-#: src/components/form/InputDuration.tsx:66
+#: src/paths/instance/orders/list/Table.tsx:75
#, c-format
-msgid "%1$sd"
+msgid "Orders"
msgstr ""
-#: src/components/form/InputDuration.tsx:68
+#: src/paths/instance/orders/list/Table.tsx:81
#, c-format
-msgid "%1$sh"
+msgid "Create order"
msgstr ""
-#: src/components/form/InputDuration.tsx:70
+#: src/paths/instance/orders/list/Table.tsx:138
#, c-format
-msgid "%1$smin"
+msgid "Load first page"
msgstr ""
-#: src/components/form/InputDuration.tsx:72
+#: src/paths/instance/orders/list/Table.tsx:145
#, c-format
-msgid "%1$ssec"
+msgid "Date"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:75
+#: src/paths/instance/orders/list/Table.tsx:191
#, c-format
-msgid "Orders"
+msgid "Refund"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:81
+#: src/paths/instance/orders/list/Table.tsx:200
#, c-format
-msgid "create order"
+msgid "copy url"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:147
+#: src/paths/instance/orders/list/Table.tsx:213
#, c-format
-msgid "load newer orders"
+msgid "Load more orders after the last one"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:154
+#: src/paths/instance/orders/list/Table.tsx:216
#, c-format
-msgid "Date"
+msgid "Load next page"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:200
+#: src/paths/instance/orders/list/Table.tsx:233
#, c-format
-msgid "Refund"
+msgid "No orders have been found matching your query!"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:209
+#: src/paths/instance/orders/list/Table.tsx:280
#, c-format
-msgid "copy url"
+msgid "Duplicated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:225
+#: src/paths/instance/orders/list/Table.tsx:293
#, c-format
-msgid "load older orders"
+msgid "This value exceed the refundable amount"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:242
+#: src/paths/instance/orders/list/Table.tsx:381
#, c-format
-msgid "No orders have been found matching your query!"
+msgid "Amount to be refunded"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:288
+#: src/paths/instance/orders/list/Table.tsx:383
#, c-format
-msgid "duplicated"
+msgid "Max refundable:"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:299
+#: src/paths/instance/orders/list/Table.tsx:391
#, c-format
-msgid "invalid format"
+msgid "Requested by the customer"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:301
+#: src/paths/instance/orders/list/Table.tsx:392
#, c-format
-msgid "this value exceed the refundable amount"
+msgid "Other"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:346
+#: src/paths/instance/orders/list/Table.tsx:395
#, c-format
-msgid "date"
+msgid "Why this order is being refunded"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:349
+#: src/paths/instance/orders/list/Table.tsx:401
#, c-format
-msgid "amount"
+msgid "More information to give context"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:352
+#: src/paths/instance/orders/details/DetailPage.tsx:70
#, c-format
-msgid "reason"
+msgid "Contract terms"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:389
+#: src/paths/instance/orders/details/DetailPage.tsx:76
#, c-format
-msgid "amount to be refunded"
+msgid "Human-readable description of the whole purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:391
+#: src/paths/instance/orders/details/DetailPage.tsx:82
#, c-format
-msgid "Max refundable:"
+msgid "Total price for the transaction"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:396
+#: src/paths/instance/orders/details/DetailPage.tsx:89
#, c-format
-msgid "Reason"
+msgid "URL for this purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:397
+#: src/paths/instance/orders/details/DetailPage.tsx:95
#, c-format
-msgid "Choose one..."
+msgid "Max fee"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:399
+#: src/paths/instance/orders/details/DetailPage.tsx:96
#, c-format
-msgid "requested by the customer"
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:400
+#: src/paths/instance/orders/details/DetailPage.tsx:101
#, c-format
-msgid "other"
+msgid "Created at"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:403
+#: src/paths/instance/orders/details/DetailPage.tsx:102
#, c-format
-msgid "why this order is being refunded"
+msgid "Time when this contract was generated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:409
+#: src/paths/instance/orders/details/DetailPage.tsx:107
#, c-format
-msgid "more information to give context"
+msgid "Refund deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:62
+#: src/paths/instance/orders/details/DetailPage.tsx:108
#, c-format
-msgid "Contract Terms"
+msgid "After this deadline has passed no refunds will be accepted"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:68
+#: src/paths/instance/orders/details/DetailPage.tsx:113
#, c-format
-msgid "human-readable description of the whole purchase"
+msgid "Payment deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:74
+#: src/paths/instance/orders/details/DetailPage.tsx:114
#, c-format
-msgid "total price for the transaction"
+msgid ""
+"After this deadline, the merchant won't accept payments for the contract"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:81
+#: src/paths/instance/orders/details/DetailPage.tsx:119
#, c-format
-msgid "URL for this purchase"
+msgid "Wire transfer deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:87
+#: src/paths/instance/orders/details/DetailPage.tsx:120
#, c-format
-msgid "Max fee"
+msgid "Transfer deadline for the exchange"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:88
+#: src/paths/instance/orders/details/DetailPage.tsx:126
#, c-format
-msgid "maximum total deposit fee accepted by the merchant for this contract"
+msgid "Time indicating when the order should be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:93
+#: src/paths/instance/orders/details/DetailPage.tsx:132
#, c-format
-msgid "Max wire fee"
+msgid "Where the order will be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:94
+#: src/paths/instance/orders/details/DetailPage.tsx:140
#, c-format
-msgid "maximum wire fee accepted by the merchant"
+msgid "Auto-refund delay"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:100
+#: src/paths/instance/orders/details/DetailPage.tsx:141
#, c-format
msgid ""
-"over how many customer transactions does the merchant expect to amortize "
-"wire fees on average"
+"How long the wallet should try to get an automatic refund for the purchase"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:105
+#: src/paths/instance/orders/details/DetailPage.tsx:146
#, c-format
-msgid "Created at"
+msgid "Extra info"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:106
+#: src/paths/instance/orders/details/DetailPage.tsx:147
#, c-format
-msgid "time when this contract was generated"
+msgid "Extra data that is only interpreted by the merchant frontend"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:112
+#: src/paths/instance/orders/details/DetailPage.tsx:220
#, c-format
-msgid "after this deadline has passed no refunds will be accepted"
+msgid "Order"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:118
+#: src/paths/instance/orders/details/DetailPage.tsx:222
#, c-format
-msgid ""
-"after this deadline, the merchant won't accept payments for the contract"
+msgid "Claimed"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:124
+#: src/paths/instance/orders/details/DetailPage.tsx:249
#, c-format
-msgid "transfer deadline for the exchange"
+msgid "Claimed at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:130
+#: src/paths/instance/orders/details/DetailPage.tsx:271
#, c-format
-msgid "time indicating when the order should be delivered"
+msgid "Timeline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:136
+#: src/paths/instance/orders/details/DetailPage.tsx:277
#, c-format
-msgid "where the order will be delivered"
+msgid "Payment details"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:144
+#: src/paths/instance/orders/details/DetailPage.tsx:297
#, c-format
-msgid "Auto-refund delay"
+msgid "Order status"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:145
+#: src/paths/instance/orders/details/DetailPage.tsx:307
#, c-format
-msgid ""
-"how long the wallet should try to get an automatic refund for the purchase"
+msgid "Product list"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:150
+#: src/paths/instance/orders/details/DetailPage.tsx:459
#, c-format
-msgid "Extra info"
+msgid "Paid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:151
+#: src/paths/instance/orders/details/DetailPage.tsx:463
#, c-format
-msgid "extra data that is only interpreted by the merchant frontend"
+msgid "Wired"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:219
+#: src/paths/instance/orders/details/DetailPage.tsx:468
#, c-format
-msgid "Order"
+msgid "Refunded"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:221
+#: src/paths/instance/orders/details/DetailPage.tsx:488
#, c-format
-msgid "claimed"
+msgid "Refund order"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:247
+#: src/paths/instance/orders/details/DetailPage.tsx:489
#, c-format
-msgid "claimed at"
+msgid "Not refundable"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:265
+#: src/paths/instance/orders/details/DetailPage.tsx:519
#, c-format
-msgid "Timeline"
+msgid "Next event in"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:271
+#: src/paths/instance/orders/details/DetailPage.tsx:555
#, c-format
-msgid "Payment details"
+msgid "Refunded amount"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:291
+#: src/paths/instance/orders/details/DetailPage.tsx:562
#, c-format
-msgid "Order status"
+msgid "Refund taken"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:572
#, c-format
-msgid "Product list"
+msgid "Status URL"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:585
+#, c-format
+msgid "Refund URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:451
+#: src/paths/instance/orders/details/DetailPage.tsx:639
#, c-format
-msgid "paid"
+msgid "Unpaid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:455
+#: src/paths/instance/orders/details/DetailPage.tsx:657
#, c-format
-msgid "wired"
+msgid "Pay at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:460
+#: src/paths/instance/orders/details/DetailPage.tsx:710
#, c-format
-msgid "refunded"
+msgid "Order status URL"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:480
+#: src/paths/instance/orders/details/DetailPage.tsx:714
#, c-format
-msgid "refund order"
+msgid "Payment URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:481
+#: src/paths/instance/orders/details/DetailPage.tsx:743
#, c-format
-msgid "not refundable"
+msgid ""
+"Unknown order status. This is an error, please contact the administrator."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:489
+#: src/paths/instance/orders/details/DetailPage.tsx:770
#, c-format
-msgid "refund"
+msgid "Back"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:553
+#: src/paths/instance/orders/details/index.tsx:88
#, c-format
-msgid "Refunded amount"
+msgid "Refund created successfully"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:560
+#: src/paths/instance/orders/details/index.tsx:95
#, c-format
-msgid "Refund taken"
+msgid "Could not create the refund"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:570
+#: src/paths/instance/orders/details/index.tsx:97
#, c-format
-msgid "Status URL"
+msgid "There are pending KYC requirements."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:583
+#: src/components/form/JumpToElementById.tsx:39
#, c-format
-msgid "Refund URI"
+msgid "Missing id"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:636
+#: src/components/form/JumpToElementById.tsx:48
#, c-format
-msgid "unpaid"
+msgid "Not found"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:654
+#: src/paths/instance/orders/list/ListPage.tsx:83
#, c-format
-msgid "pay at"
+msgid "Select date to show nearby orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:666
+#: src/paths/instance/orders/list/ListPage.tsx:96
#, c-format
-msgid "created at"
+msgid "Only show paid orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:707
+#: src/paths/instance/orders/list/ListPage.tsx:99
#, c-format
-msgid "Order status URL"
+msgid "New"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:711
+#: src/paths/instance/orders/list/ListPage.tsx:116
#, c-format
-msgid "Payment URI"
+msgid "Only show orders with refunds"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:740
+#: src/paths/instance/orders/list/ListPage.tsx:126
#, c-format
msgid ""
-"Unknown order status. This is an error, please contact the administrator."
+"Only show orders where customers paid, but wire payments from payment "
+"provider are still pending"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:767
+#: src/paths/instance/orders/list/ListPage.tsx:129
#, c-format
-msgid "Back"
+msgid "Not wired"
msgstr ""
-#: src/paths/instance/orders/details/index.tsx:79
+#: src/paths/instance/orders/list/ListPage.tsx:139
#, c-format
-msgid "refund created successfully"
+msgid "Completed"
msgstr ""
-#: src/paths/instance/orders/details/index.tsx:85
+#: src/paths/instance/orders/list/ListPage.tsx:146
#, c-format
-msgid "could not create the refund"
+msgid "Remove all filters"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:78
+#: src/paths/instance/orders/list/ListPage.tsx:164
#, c-format
-msgid "select date to show nearby orders"
+msgid "Clear date filter"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:94
+#: src/paths/instance/orders/list/ListPage.tsx:178
#, c-format
-msgid "order id"
+msgid "Jump to date (%1$s)"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:100
+#: src/paths/instance/orders/list/index.tsx:113
#, c-format
-msgid "jump to order with the given order ID"
+msgid "Jump to order with the given product ID"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:122
+#: src/paths/instance/orders/list/index.tsx:114
#, c-format
-msgid "remove all filters"
+msgid "Order id"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:132
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
#, c-format
-msgid "only show paid orders"
+msgid "Invalid. Please insert only characters and numbers"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:135
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
#, c-format
-msgid "Paid"
+msgid "Just letters and numbers from 2 to 7"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:142
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
#, c-format
-msgid "only show orders with refunds"
+msgid "Size of the key must be 32"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:145
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
#, c-format
-msgid "Refunded"
+msgid "Internal id on the system"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
+#, c-format
+msgid "Useful to identify the device physically"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
+#, c-format
+msgid "Verification algorithm"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
+#, c-format
+msgid "Algorithm to use to verify transaction in offline mode"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:152
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
+#, c-format
+msgid "Device key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
+#, c-format
+msgid "Be sure to be very hard to guess or use the random generator"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
+#, c-format
+msgid "Your device need to have exactly the same value"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
+#, c-format
+msgid "Generate random secret key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
+#, c-format
+msgid "Random"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
#, c-format
msgid ""
-"only show orders where customers paid, but wire payments from payment "
-"provider are still pending"
+"You can scan the next QR code with your device or save the key before "
+"continuing."
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:155
+#: src/paths/instance/otp_devices/create/index.tsx:60
#, c-format
-msgid "Not wired"
+msgid "Device added successfully"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:170
+#: src/paths/instance/otp_devices/create/index.tsx:66
#, c-format
-msgid "clear date filter"
+msgid "Could not add device"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:184
+#: src/paths/instance/otp_devices/list/Table.tsx:57
#, c-format
-msgid "date (YYYY/MM/DD)"
+msgid "OTP Devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:103
+#: src/paths/instance/otp_devices/list/Table.tsx:62
#, c-format
-msgid "Enter an order id"
+msgid "Add new devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:111
+#: src/paths/instance/otp_devices/list/Table.tsx:117
#, c-format
-msgid "order not found"
+msgid "Load more devices before the first one"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:178
+#: src/paths/instance/otp_devices/list/Table.tsx:155
#, c-format
-msgid "could not get the order to refund"
+msgid "Delete selected devices from the database"
msgstr ""
-#: src/components/exception/AsyncButton.tsx:43
+#: src/paths/instance/otp_devices/list/Table.tsx:170
#, c-format
-msgid "Loading..."
+msgid "Load more devices after the last one"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:90
+#, c-format
+msgid "Device delete successfully"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:95
+#, c-format
+msgid "Could not delete the device"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
+#, c-format
+msgid "Device:"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
+#, c-format
+msgid "Not modified"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
+#, c-format
+msgid "Change key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:119
+#, c-format
+msgid "Could not update template"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:121
+#, c-format
+msgid "Template id is unknown"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:129
+#, c-format
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
msgstr ""
#: src/components/form/InputStock.tsx:99
#, c-format
msgid ""
-"click here to configure the stock of the product, leave it as is and the "
-"backend will not control stock"
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
msgstr ""
#: src/components/form/InputStock.tsx:109
@@ -1310,7 +2139,7 @@ msgstr ""
#: src/components/form/InputStock.tsx:115
#, c-format
-msgid "this product has been configured without stock control"
+msgid "This product has been configured without stock control"
msgstr ""
#: src/components/form/InputStock.tsx:119
@@ -1320,1404 +2149,1515 @@ msgstr ""
#: src/components/form/InputStock.tsx:136
#, c-format
-msgid "lost cannot be greater than current and incoming (max %1$s)"
+msgid "Lost can't be greater than current and incoming (max %1$s)"
msgstr ""
-#: src/components/form/InputStock.tsx:176
+#: src/components/form/InputStock.tsx:169
#, c-format
msgid "Incoming"
msgstr ""
-#: src/components/form/InputStock.tsx:177
+#: src/components/form/InputStock.tsx:170
#, c-format
msgid "Lost"
msgstr ""
-#: src/components/form/InputStock.tsx:192
+#: src/components/form/InputStock.tsx:185
#, c-format
msgid "Current"
msgstr ""
-#: src/components/form/InputStock.tsx:196
+#: src/components/form/InputStock.tsx:189
#, c-format
-msgid "remove stock control for this product"
+msgid "Remove stock control for this product"
msgstr ""
-#: src/components/form/InputStock.tsx:202
+#: src/components/form/InputStock.tsx:195
#, c-format
msgid "without stock"
msgstr ""
-#: src/components/form/InputStock.tsx:211
+#: src/components/form/InputStock.tsx:204
#, c-format
msgid "Next restock"
msgstr ""
-#: src/components/form/InputStock.tsx:217
+#: src/components/form/InputStock.tsx:208
+#, c-format
+msgid "Warehouse address"
+msgstr ""
+
+#: src/components/form/InputArray.tsx:118
#, c-format
-msgid "Delivery address"
+msgid "Add element to the list"
msgstr ""
-#: src/components/product/ProductForm.tsx:133
+#: src/components/product/ProductForm.tsx:120
#, c-format
-msgid "product identification to use in URLs (for internal use only)"
+msgid "Invalid amount"
msgstr ""
-#: src/components/product/ProductForm.tsx:139
+#: src/components/product/ProductForm.tsx:191
#, c-format
-msgid "illustration of the product for customers"
+msgid "Product identification to use in URLs (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:145
+#: src/components/product/ProductForm.tsx:197
#, c-format
-msgid "product description for customers"
+msgid "Illustration of the product for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:149
+#: src/components/product/ProductForm.tsx:203
#, c-format
-msgid "Age restricted"
+msgid "Product description for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:150
+#: src/components/product/ProductForm.tsx:207
#, c-format
-msgid "is this product restricted for customer below certain age?"
+msgid "Age restriction"
msgstr ""
-#: src/components/product/ProductForm.tsx:155
+#: src/components/product/ProductForm.tsx:208
+#, c-format
+msgid "Is this product restricted for customer below certain age?"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:209
+#, c-format
+msgid "Minimum age of the customer"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:213
+#, c-format
+msgid "Unit name"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:214
#, c-format
msgid ""
-"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
-"items, 5 meters) for customers"
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:215
+#, c-format
+msgid "Example: kg, items or liters"
msgstr ""
-#: src/components/product/ProductForm.tsx:160
+#: src/components/product/ProductForm.tsx:219
+#, c-format
+msgid "Price per unit"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:220
#, c-format
msgid ""
-"sale price for customers, including taxes, for above units of the product"
+"Sale price for customers, including taxes, for above units of the product."
msgstr ""
-#: src/components/product/ProductForm.tsx:164
+#: src/components/product/ProductForm.tsx:224
#, c-format
msgid "Stock"
msgstr ""
-#: src/components/product/ProductForm.tsx:166
+#: src/components/product/ProductForm.tsx:226
#, c-format
-msgid ""
-"product inventory for products with finite supply (for internal use only)"
+msgid "Inventory for products with finite supply (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:171
+#: src/components/product/ProductForm.tsx:231
#, c-format
-msgid "taxes included in the product price, exposed to customers"
+msgid "Taxes included in the product price, exposed to customers."
msgstr ""
-#: src/paths/instance/products/create/CreatePage.tsx:66
+#: src/components/product/ProductForm.tsx:235
#, c-format
-msgid "Need to complete marked fields"
+msgid "Categories"
msgstr ""
-#: src/paths/instance/products/create/index.tsx:51
+#: src/components/product/ProductForm.tsx:241
#, c-format
-msgid "could not create product"
+msgid "Search by category description or id"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:68
+#: src/components/product/ProductForm.tsx:242
#, c-format
-msgid "Products"
+msgid "Categories where this product will be listed on."
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:52
+#, c-format
+msgid "Product created successfully"
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:58
+#, c-format
+msgid "Could not create product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:73
+#: src/paths/instance/products/list/Table.tsx:76
#, c-format
-msgid "add product to inventory"
+msgid "Inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:137
+#: src/paths/instance/products/list/Table.tsx:81
#, c-format
-msgid "Sell"
+msgid "Add product to inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:143
+#: src/paths/instance/products/list/Table.tsx:163
#, c-format
-msgid "Profit"
+msgid "Sales"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:149
+#: src/paths/instance/products/list/Table.tsx:169
#, c-format
msgid "Sold"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:210
+#: src/paths/instance/products/list/Table.tsx:235
#, c-format
-msgid "free"
+msgid "Free"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:248
+#: src/paths/instance/products/list/Table.tsx:275
#, c-format
-msgid "go to product update page"
+msgid "Go to product update page"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:255
+#: src/paths/instance/products/list/Table.tsx:282
#, c-format
msgid "Update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:260
+#: src/paths/instance/products/list/Table.tsx:287
#, c-format
-msgid "remove this product from the database"
+msgid "Remove this product from the database"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:331
+#: src/paths/instance/products/list/Table.tsx:323
#, c-format
-msgid "update the product with new price"
+msgid "Load more products after the last one"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:341
+#: src/paths/instance/products/list/Table.tsx:365
#, c-format
-msgid "update product with new price"
+msgid "Update the product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:399
+#: src/paths/instance/products/list/Table.tsx:376
#, c-format
-msgid "add more elements to the inventory"
+msgid "Update product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:404
+#: src/paths/instance/products/list/Table.tsx:387
#, c-format
-msgid "report elements lost in the inventory"
+msgid "Confirm update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:409
+#: src/paths/instance/products/list/Table.tsx:435
#, c-format
-msgid "new price for the product"
+msgid "Add more elements to the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:421
+#: src/paths/instance/products/list/Table.tsx:440
#, c-format
-msgid "the are value with errors"
+msgid "Report elements lost in the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:422
+#: src/paths/instance/products/list/Table.tsx:445
#, c-format
-msgid "update product with new stock and price"
+msgid "New price for the product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:463
+#: src/paths/instance/products/list/Table.tsx:457
#, c-format
-msgid "There is no products yet, add more pressing the + sign"
+msgid "The are value with errors"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:458
+#, c-format
+msgid "Update product with new stock and price"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:499
+#, c-format
+msgid "There are no products yet, add more pressing the + sign"
msgstr ""
#: src/paths/instance/products/list/index.tsx:86
#, c-format
-msgid "product updated successfully"
+msgid "Jump to product with the given product ID"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:92
+#: src/paths/instance/products/list/index.tsx:87
#, c-format
-msgid "could not update the product"
+msgid "Product id"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:103
+#: src/paths/instance/products/list/index.tsx:104
#, c-format
-msgid "product delete successfully"
+msgid "Product updated successfully"
msgstr ""
#: src/paths/instance/products/list/index.tsx:109
#, c-format
-msgid "could not delete the product"
+msgid "Could not update the product"
msgstr ""
-#: src/paths/instance/products/update/UpdatePage.tsx:56
+#: src/paths/instance/products/list/index.tsx:144
#, c-format
-msgid "Product id:"
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:149
+#, c-format
+msgid "Could not delete the product"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:95
+#: src/paths/instance/products/list/index.tsx:165
#, c-format
msgid ""
-"To complete the setup of the reserve, you must now initiate a wire transfer "
-"using the given wire transfer subject and crediting the specified amount to "
-"the indicated account of the exchange."
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:102
+#: src/paths/instance/products/list/index.tsx:173
#, c-format
-msgid "If your system supports RFC 8905, you can do this by opening this URI:"
+msgid "Deleting an product can't be undone."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:83
+#: src/paths/instance/products/update/UpdatePage.tsx:56
#, c-format
-msgid "it should be greater than 0"
+msgid "Product id:"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:88
+#: src/paths/instance/products/update/index.tsx:85
#, c-format
-msgid "must be a valid URL"
+msgid "Product (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:107
+#: src/paths/instance/products/update/index.tsx:91
#, c-format
-msgid "Initial balance"
+msgid "Could not update product"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:112
#, c-format
-msgid "balance prior to deposit"
+msgid "Must be greater that 0"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:119
#, c-format
-msgid "Exchange URL"
+msgid "Too short"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:113
+#: src/paths/instance/templates/create/CreatePage.tsx:192
#, c-format
-msgid "URL of exchange"
+msgid "Identifier"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:148
+#: src/paths/instance/templates/create/CreatePage.tsx:193
#, c-format
-msgid "Next"
+msgid "Name of the template in URLs."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:186
+#: src/paths/instance/templates/create/CreatePage.tsx:199
#, c-format
-msgid "Wire method"
+msgid "Describe what this template stands for"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:187
+#: src/paths/instance/templates/create/CreatePage.tsx:206
#, c-format
-msgid "method to use for wire transfer"
+msgid "If specified, this template will create an order with the same summary"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:189
+#: src/paths/instance/templates/create/CreatePage.tsx:210
#, c-format
-msgid "Select one wire method"
+msgid "Summary is editable"
msgstr ""
-#: src/paths/instance/reserves/create/index.tsx:62
+#: src/paths/instance/templates/create/CreatePage.tsx:211
#, c-format
-msgid "could not create reserve"
+msgid "Allow the user to change the summary."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:77
+#: src/paths/instance/templates/create/CreatePage.tsx:217
#, c-format
-msgid "Valid until"
+msgid "If specified, this template will create an order with the same price"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:82
+#: src/paths/instance/templates/create/CreatePage.tsx:221
#, c-format
-msgid "Created balance"
+msgid "Amount is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:99
+#: src/paths/instance/templates/create/CreatePage.tsx:222
#, c-format
-msgid "Exchange balance"
+msgid "Allow the user to select the amount to pay."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:104
+#: src/paths/instance/templates/create/CreatePage.tsx:229
#, c-format
-msgid "Picked up"
+msgid "Currency is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:109
+#: src/paths/instance/templates/create/CreatePage.tsx:230
#, c-format
-msgid "Committed"
+msgid "Allow the user to change currency."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:116
+#: src/paths/instance/templates/create/CreatePage.tsx:232
#, c-format
-msgid "Account address"
+msgid "Supported currencies"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:233
#, c-format
-msgid "Subject"
+msgid "Supported currencies: %1$s"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:130
+#: src/paths/instance/templates/create/CreatePage.tsx:241
#, c-format
-msgid "Tips"
+msgid "Minimum age"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:193
+#: src/paths/instance/templates/create/CreatePage.tsx:243
#, c-format
-msgid "No tips has been authorized from this reserve"
+msgid "Is this contract restricted to some age?"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:213
+#: src/paths/instance/templates/create/CreatePage.tsx:247
#, c-format
-msgid "Authorized"
+msgid "Payment timeout"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:222
+#: src/paths/instance/templates/create/CreatePage.tsx:249
#, c-format
-msgid "Expiration"
+msgid ""
+"How much time the customer has to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:254
#, c-format
-msgid "amount of tip"
+msgid "OTP device"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:255
#, c-format
-msgid "Justification"
+msgid "Use to verify transaction while offline."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:114
+#: src/paths/instance/templates/create/CreatePage.tsx:257
#, c-format
-msgid "reason for the tip"
+msgid "No OTP device."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:118
+#: src/paths/instance/templates/create/CreatePage.tsx:259
#, c-format
-msgid "URL after tip"
+msgid "Add one first"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:272
#, c-format
-msgid "URL to visit after tip payment"
+msgid "No device"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:65
+#: src/paths/instance/templates/create/CreatePage.tsx:276
#, c-format
-msgid "Reserves not yet funded"
+msgid "Use to verify transaction in offline mode."
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:89
+#: src/paths/instance/templates/create/index.tsx:52
#, c-format
-msgid "Reserves ready"
+msgid "Template has been created"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:95
+#: src/paths/instance/templates/create/index.tsx:58
#, c-format
-msgid "add new reserve"
+msgid "Could not create template"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:143
+#: src/paths/instance/templates/list/Table.tsx:61
#, c-format
-msgid "Expires at"
+msgid "Templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:146
+#: src/paths/instance/templates/list/Table.tsx:66
#, c-format
-msgid "Initial"
+msgid "Add new templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:202
+#: src/paths/instance/templates/list/Table.tsx:127
#, c-format
-msgid "delete selected reserve from the database"
+msgid "Load more templates before the first one"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:210
+#: src/paths/instance/templates/list/Table.tsx:165
#, c-format
-msgid "authorize new tip from selected reserve"
+msgid "Delete selected templates from the database"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:237
+#: src/paths/instance/templates/list/Table.tsx:172
#, c-format
-msgid ""
-"There is no ready reserves yet, add more pressing the + sign or fund them"
+msgid "Use template to create new order"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:264
+#: src/paths/instance/templates/list/Table.tsx:175
#, c-format
-msgid "Expected Balance"
+msgid "Use template"
msgstr ""
-#: src/paths/instance/reserves/list/index.tsx:110
+#: src/paths/instance/templates/list/Table.tsx:179
#, c-format
-msgid "could not create the tip"
+msgid "Create qr code for the template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:77
+#: src/paths/instance/templates/list/Table.tsx:194
#, c-format
-msgid "should not be empty"
+msgid "Load more templates after the last one"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:93
+#: src/paths/instance/templates/list/Table.tsx:214
#, c-format
-msgid "should be greater that 0"
+msgid "There are no templates yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:96
+#: src/paths/instance/templates/list/index.tsx:91
#, c-format
-msgid "can't be empty"
+msgid "Jump to template with the given template ID"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:100
+#: src/paths/instance/templates/list/index.tsx:92
#, c-format
-msgid "to short"
+msgid "Template identification"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:108
+#: src/paths/instance/templates/list/index.tsx:132
#, c-format
-msgid "just letters and numbers from 2 to 7"
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:110
+#: src/paths/instance/templates/list/index.tsx:137
#, c-format
-msgid "size of the key should be 32"
+msgid "Failed to delete template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:137
+#: src/paths/instance/templates/list/index.tsx:153
#, c-format
-msgid "Identifier"
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:138
+#: src/paths/instance/templates/list/index.tsx:160
#, c-format
-msgid "Name of the template in URLs."
+msgid "Deleting an template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:144
+#: src/paths/instance/templates/list/index.tsx:162
#, c-format
-msgid "Describe what this template stands for"
+msgid "can't be undone"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:149
+#: src/paths/instance/templates/qr/QrPage.tsx:77
#, c-format
-msgid "Fixed summary"
+msgid "Print"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:150
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
#, c-format
msgid "If specified, this template will create order with the same summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:154
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
#, c-format
-msgid "Fixed price"
+msgid "If specified, this template will create orders with the same price"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:155
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
#, c-format
-msgid "If specified, this template will create order with the same price"
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:159
+#: src/paths/instance/templates/update/index.tsx:90
#, c-format
-msgid "Minimum age"
+msgid "Template (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:161
+#: src/paths/instance/templates/use/UsePage.tsx:58
#, c-format
-msgid "Is this contract restricted to some age?"
+msgid "An amount is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:165
+#: src/paths/instance/templates/use/UsePage.tsx:60
#, c-format
-msgid "Payment timeout"
+msgid "An order summary is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:167
+#: src/paths/instance/templates/use/UsePage.tsx:88
#, c-format
-msgid ""
-"How much time has the customer to complete the payment once the order was "
-"created."
+msgid "New order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:171
+#: src/paths/instance/templates/use/UsePage.tsx:110
#, c-format
-msgid "Verification algorithm"
+msgid "Amount of the order"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:172
+#: src/paths/instance/templates/use/UsePage.tsx:115
#, c-format
-msgid "Algorithm to use to verify transaction in offline mode"
+msgid "Order summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:180
+#: src/paths/instance/templates/use/index.tsx:125
#, c-format
-msgid "Point-of-sale key"
+msgid "Could not create order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:182
+#: src/paths/instance/token/DetailPage.tsx:57
#, c-format
-msgid "Useful to validate the purchase"
+msgid "You need your access token to perform the operation"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:196
+#: src/paths/instance/token/DetailPage.tsx:74
#, c-format
-msgid "generate random secret key"
+msgid "You are updating the access token from instance with id \"%1$s\""
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:203
+#: src/paths/instance/token/DetailPage.tsx:105
#, c-format
-msgid "random"
+msgid "This instance doesn't have authentication token."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:208
+#: src/paths/instance/token/DetailPage.tsx:106
#, c-format
-msgid "show secret key"
+msgid "You can leave it empty if there is another layer of security."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:209
+#: src/paths/instance/token/DetailPage.tsx:121
#, c-format
-msgid "hide secret key"
+msgid "Current access token"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:216
+#: src/paths/instance/token/DetailPage.tsx:126
#, c-format
-msgid "hide"
+msgid "Clearing the access token will mean public access to the instance."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:218
+#: src/paths/instance/token/DetailPage.tsx:142
#, c-format
-msgid "show"
+msgid "Clear token"
msgstr ""
-#: src/paths/instance/templates/create/index.tsx:52
+#: src/paths/instance/token/DetailPage.tsx:177
#, c-format
-msgid "could not inform template"
+msgid "Confirm change"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:54
+#: src/paths/instance/token/index.tsx:83
#, c-format
-msgid "Amount is required"
+msgid "Failed to clear token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:58
+#: src/paths/instance/token/index.tsx:109
#, c-format
-msgid "Order summary is required"
+msgid "Failed to set new token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:86
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
#, c-format
-msgid "New order for template"
+msgid "Slug"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:108
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
#, c-format
-msgid "Amount of the order"
+msgid "Token family slug to use in URLs (for internal use only)"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:113
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
#, c-format
-msgid "Order summary"
+msgid "Kind"
msgstr ""
-#: src/paths/instance/templates/use/index.tsx:92
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
#, c-format
-msgid "could not create order from template"
+msgid "Token family kind"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:131
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
#, c-format
-msgid ""
-"Here you can specify a default value for fields that are not fixed. Default "
-"values can be edited by the customer before the payment."
+msgid "User-readable token family name"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:148
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
#, c-format
-msgid "Fixed amount"
+msgid "Token family description for customers"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:149
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
#, c-format
-msgid "Default amount"
+msgid "Valid After"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:161
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
#, c-format
-msgid "Default summary"
+msgid "Token family can issue tokens after this date"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:177
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
#, c-format
-msgid "Print"
+msgid "Valid Before"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:184
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
#, c-format
-msgid "Setup TOTP"
+msgid "Token family can issue tokens until this date"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:65
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
#, c-format
-msgid "Templates"
+msgid "Duration"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:70
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
#, c-format
-msgid "add new templates"
+msgid "Validity duration of a issued token"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:142
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
#, c-format
-msgid "load more templates before the first one"
+msgid "Token familty created successfully"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:146
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
#, c-format
-msgid "load newer templates"
+msgid "Could not create token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:181
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
#, c-format
-msgid "delete selected templates from the database"
+msgid "Token Families"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:188
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
#, c-format
-msgid "use template to create new order"
+msgid "Add token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:195
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
#, c-format
-msgid "create qr code for the template"
+msgid "Go to token family update page"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:210
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
#, c-format
-msgid "load more templates after the last one"
+msgid "Remove this token family from the database"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:214
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
#, c-format
-msgid "load older templates"
+msgid ""
+"There are no token families yet, add the first one by pressing the + sign."
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:231
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
#, c-format
-msgid "There is no templates yet, add more pressing the + sign"
+msgid "Token family updated successfully"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:104
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
#, c-format
-msgid "template delete successfully"
+msgid "Could not update the token family"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:110
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
#, c-format
-msgid "could not delete the template"
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/update/index.tsx:90
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
#, c-format
-msgid "could not update template"
+msgid "Failed to delete token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:57
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
#, c-format
-msgid "should be one of '%1$s'"
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
#, c-format
-msgid "Webhook ID to use"
+msgid "Deleting a token family %1$s ."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
#, c-format
-msgid "Event"
+msgid "Token Family: %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:90
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
#, c-format
-msgid "The event of the webhook: why the webhook is used"
+msgid "Could not update token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:94
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
#, c-format
-msgid "Method"
+msgid "Check the id, does not look valid"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
#, c-format
-msgid "Method used by the webhook"
+msgid "Must have 52 characters, current %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
#, c-format
-msgid "URL"
+msgid "URL doesn't have the right format"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
#, c-format
-msgid "URL of the webhook where the customer will be redirected"
+msgid "Credited bank account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
#, c-format
-msgid "Header"
+msgid "Select an account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:106
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
#, c-format
-msgid "Header template of the webhook"
+msgid "Bank account of the merchant where the payment was received"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:111
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
#, c-format
-msgid "Body"
+msgid "Wire transfer ID"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
#, c-format
-msgid "Body template by the webhook"
+msgid ""
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
+"characters long"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:61
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
#, c-format
-msgid "Webhooks"
+msgid "Exchange URL"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:66
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
#, c-format
-msgid "add new webhooks"
+msgid ""
+"Base URL of the exchange that made the transfer, should have been in the "
+"wire transfer subject"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:137
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
#, c-format
-msgid "load more webhooks before the first one"
+msgid "Amount credited"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:141
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
#, c-format
-msgid "load newer webhooks"
+msgid "Actual amount that was wired to the merchant's bank account"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:151
+#: src/paths/instance/transfers/create/index.tsx:62
#, c-format
-msgid "Event type"
+msgid "Wire transfer informed successfully"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:176
+#: src/paths/instance/transfers/create/index.tsx:68
#, c-format
-msgid "delete selected webhook from the database"
+msgid "Could not inform transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:198
+#: src/paths/instance/transfers/list/Table.tsx:62
#, c-format
-msgid "load more webhooks after the last one"
+msgid "Transfers"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:202
+#: src/paths/instance/transfers/list/Table.tsx:67
#, c-format
-msgid "load older webhooks"
+msgid "Add new transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:219
+#: src/paths/instance/transfers/list/Table.tsx:120
#, c-format
-msgid "There is no webhooks yet, add more pressing the + sign"
+msgid "Load more transfers before the first one"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:94
+#: src/paths/instance/transfers/list/Table.tsx:133
#, c-format
-msgid "webhook delete successfully"
+msgid "Credit"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:136
#, c-format
-msgid "could not delete the webhook"
+msgid "Confirmed"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:63
+#: src/paths/instance/transfers/list/Table.tsx:139
#, c-format
-msgid "check the id, does not look valid"
+msgid "Verified"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:65
+#: src/paths/instance/transfers/list/Table.tsx:142
#, c-format
-msgid "should have 52 characters, current %1$s"
+msgid "Executed on"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:72
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "URL doesn't have the right format"
+msgid "yes"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "Credited bank account"
+msgid "no"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:158
#, c-format
-msgid "Select one account"
+msgid "never"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:101
+#: src/paths/instance/transfers/list/Table.tsx:163
#, c-format
-msgid "Bank account of the merchant where the payment was received"
+msgid "unknown"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:105
+#: src/paths/instance/transfers/list/Table.tsx:169
#, c-format
-msgid "Wire transfer ID"
+msgid "Delete selected transfer from the database"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:107
+#: src/paths/instance/transfers/list/Table.tsx:184
#, c-format
-msgid ""
-"unique identifier of the wire transfer used by the exchange, must be 52 "
-"characters long"
+msgid "Load more transfers after the last one"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/list/Table.tsx:204
#, c-format
-msgid ""
-"Base URL of the exchange that made the transfer, should have been in the "
-"wire transfer subject"
+msgid "There are no transfers yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:117
+#: src/paths/instance/transfers/list/ListPage.tsx:83
#, c-format
-msgid "Amount credited"
+msgid "All accounts"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:118
+#: src/paths/instance/transfers/list/ListPage.tsx:84
#, c-format
-msgid "Actual amount that was wired to the merchant's bank account"
+msgid "Filter by account address"
msgstr ""
-#: src/paths/instance/transfers/create/index.tsx:58
+#: src/paths/instance/transfers/list/ListPage.tsx:105
#, c-format
-msgid "could not inform transfer"
+msgid "Only show wire transfers confirmed by the merchant"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:61
+#: src/paths/instance/transfers/list/ListPage.tsx:115
#, c-format
-msgid "Transfers"
+msgid "Only show wire transfers claimed by the exchange"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:66
+#: src/paths/instance/transfers/list/ListPage.tsx:118
#, c-format
-msgid "add new transfer"
+msgid "Unverified"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:129
+#: src/paths/instance/transfers/list/index.tsx:118
#, c-format
-msgid "load more transfers before the first one"
+msgid "Wire transfer \"%1$s...\" has been deleted"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:133
+#: src/paths/instance/transfers/list/index.tsx:123
#, c-format
-msgid "load newer transfers"
+msgid "Failed to delete transfer"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:143
+#: src/paths/admin/create/CreatePage.tsx:86
#, c-format
-msgid "Credit"
+msgid "Must be business or individual"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:152
+#: src/paths/admin/create/CreatePage.tsx:104
#, c-format
-msgid "Confirmed"
+msgid "Pay delay can't be greater than wire transfer delay"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:155
+#: src/paths/admin/create/CreatePage.tsx:112
#, c-format
-msgid "Verified"
+msgid "Max 7 lines"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:158
+#: src/paths/admin/create/CreatePage.tsx:138
#, c-format
-msgid "Executed at"
+msgid "Doesn't match"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:215
#, c-format
-msgid "yes"
+msgid "Enable access control"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:216
#, c-format
-msgid "no"
+msgid "Choose if the backend server should authenticate access."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:181
+#: src/paths/admin/create/CreatePage.tsx:243
#, c-format
-msgid "unknown"
+msgid "Access control is not yet decided. This instance can't be created."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:187
+#: src/paths/admin/create/CreatePage.tsx:250
#, c-format
-msgid "delete selected transfer from the database"
+msgid "Authorization must be handled externally."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:202
+#: src/paths/admin/create/CreatePage.tsx:256
#, c-format
-msgid "load more transfer after the last one"
+msgid "Authorization is handled by the backend server."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:206
+#: src/paths/admin/create/CreatePage.tsx:274
#, c-format
-msgid "load older transfers"
+msgid "Need to complete marked fields and choose authorization method"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:223
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
#, c-format
-msgid "There is no transfer yet, add more pressing the + sign"
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:79
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "filter by account address"
+msgid "Business name"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:100
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
#, c-format
-msgid "only show wire transfers confirmed by the merchant"
+msgid "Legal name of the business represented by this instance."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:110
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
#, c-format
-msgid "only show wire transfers claimed by the exchange"
+msgid "Email"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:113
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
#, c-format
-msgid "Unverified"
+msgid "Contact email"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:69
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
#, c-format
-msgid "is not valid"
+msgid "Website URL"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:94
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
#, c-format
-msgid "is not a number"
+msgid "URL."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:96
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
#, c-format
-msgid "must be 1 or greater"
+msgid "Logo"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:107
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
#, c-format
-msgid "max 7 lines"
+msgid "Logo image."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:178
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
#, c-format
-msgid "change authorization configuration"
+msgid "Physical location of the merchant."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:217
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
#, c-format
-msgid "Need to complete marked fields and choose authorization method"
+msgid "Jurisdiction"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:82
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
#, c-format
-msgid "This is not a valid bitcoin address."
+msgid "Jurisdiction for legal disputes with the merchant."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:95
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
#, c-format
-msgid "This is not a valid Ethereum address."
+msgid "Pay transaction fee"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:118
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
#, c-format
-msgid "IBAN numbers usually have more that 4 digits"
+msgid "Assume the cost of the transaction of let the user pay for it."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:120
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
#, c-format
-msgid "IBAN numbers usually have less that 34 digits"
+msgid "Default payment delay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:128
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
#, c-format
-msgid "IBAN country code not found"
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:153
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#, c-format
+msgid "Default wire transfer delay"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
#, c-format
-msgid "IBAN number is not valid, checksum is wrong"
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:248
+#: src/paths/instance/update/UpdatePage.tsx:124
#, c-format
-msgid "Target type"
+msgid "Instance id"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:249
+#: src/paths/instance/update/index.tsx:108
#, c-format
-msgid "Method to use for wire transfer"
+msgid "Failed to update instance"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:258
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
#, c-format
-msgid "Routing"
+msgid "Must be \"pay\" or \"refund\""
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:259
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
#, c-format
-msgid "Routing number."
+msgid "Must be one of '%1$s'"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:263
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
#, c-format
-msgid "Account"
+msgid "Webhook ID to use"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:264
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
#, c-format
-msgid "Account number."
+msgid "Event"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:273
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
#, c-format
-msgid "Business Identifier Code."
+msgid "Pay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:282
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
#, c-format
-msgid "Bank Account Number."
+msgid "The event of the webhook: why the webhook is used"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:292
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
#, c-format
-msgid "Unified Payment Interface."
+msgid "Method"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:301
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
#, c-format
-msgid "Bitcoin protocol."
+msgid "GET"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:310
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
#, c-format
-msgid "Ethereum protocol."
+msgid "POST"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:319
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
#, c-format
-msgid "Interledger protocol."
+msgid "PUT"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:328
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
#, c-format
-msgid "Host"
+msgid "PATCH"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:329
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
#, c-format
-msgid "Bank host."
+msgid "HEAD"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:334
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
#, c-format
-msgid "Bank account."
+msgid "Method used by the webhook"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:343
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
#, c-format
-msgid "Bank account owner's name."
+msgid "URL"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:370
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
#, c-format
-msgid "No accounts yet."
+msgid "URL of the webhook where the customer will be redirected"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:52
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
#, c-format
msgid ""
-"Name of the instance in URLs. The 'default' instance is special in that it "
-"is used to administer other instances."
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:58
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
#, c-format
-msgid "Business name"
+msgid "For example %1$s will be replaced with the the order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
#, c-format
-msgid "Legal name of the business represented by this instance."
+msgid "The short list of variables are:"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:64
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
#, c-format
-msgid "Email"
+msgid "order's description"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:65
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
#, c-format
-msgid "Contact email"
+msgid "order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:70
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
#, c-format
-msgid "Website URL"
+msgid "order's unique identification"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:71
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
#, c-format
-msgid "URL."
+msgid "the amount that was being refunded"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:76
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
#, c-format
-msgid "Logo"
+msgid "the reason entered by the merchant staff for granting the refund"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:77
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
#, c-format
-msgid "Logo image."
+msgid "time of the refund in nanoseconds since 1970"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:82
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
#, c-format
-msgid "Bank account"
+msgid "Http body"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:83
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
#, c-format
-msgid "URI specifying bank account for crediting revenue."
+msgid "Body template by the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:88
+#: src/paths/instance/webhooks/create/index.tsx:52
#, c-format
-msgid "Default max deposit fee"
+msgid "Webhook create successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:89
+#: src/paths/instance/webhooks/create/index.tsx:58
#, c-format
-msgid ""
-"Maximum deposit fees this merchant is willing to pay per order by default."
+msgid "Could not create the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#: src/paths/instance/webhooks/create/index.tsx:66
#, c-format
-msgid "Default max wire fee"
+msgid "Could not create webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:95
+#: src/paths/instance/webhooks/list/Table.tsx:57
#, c-format
-msgid ""
-"Maximum wire fees this merchant is willing to pay per wire transfer by "
-"default."
+msgid "Webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:100
+#: src/paths/instance/webhooks/list/Table.tsx:62
#, c-format
-msgid "Default wire fee amortization"
+msgid "Add new webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#: src/paths/instance/webhooks/list/Table.tsx:117
#, c-format
-msgid ""
-"Number of orders excess wire transfer fees will be divided by to compute per "
-"order surcharge."
+msgid "Load more webhooks before the first one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#: src/paths/instance/webhooks/list/Table.tsx:130
#, c-format
-msgid "Physical location of the merchant."
+msgid "Event type"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#: src/paths/instance/webhooks/list/Table.tsx:155
#, c-format
-msgid "Jurisdiction"
+msgid "Delete selected webhook from the database"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#: src/paths/instance/webhooks/list/Table.tsx:170
#, c-format
-msgid "Jurisdiction for legal disputes with the merchant."
+msgid "Load more webhooks after the last one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:122
+#: src/paths/instance/webhooks/list/Table.tsx:190
#, c-format
-msgid "Default payment delay"
+msgid "There are no webhooks yet, add more pressing the + sign"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:124
+#: src/paths/instance/webhooks/list/index.tsx:88
#, c-format
-msgid ""
-"Time customers have to pay an order before the offer expires by default."
+msgid "Webhook delete successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:129
+#: src/paths/instance/webhooks/list/index.tsx:93
#, c-format
-msgid "Default wire transfer delay"
+msgid "Could not delete the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:130
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
#, c-format
-msgid ""
-"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
-"enabling it to aggregate smaller payments into larger wire transfers and "
-"reducing wire fees."
+msgid "Header"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:164
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
#, c-format
-msgid "Instance id"
+msgid "Header template of the webhook"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:173
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
#, c-format
-msgid "Change the authorization method use for this instance."
+msgid "Body"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:182
+#: src/paths/instance/webhooks/update/index.tsx:88
#, c-format
-msgid "Manage access token"
+msgid "Webhook updated"
msgstr ""
-#: src/paths/instance/update/index.tsx:112
+#: src/paths/instance/webhooks/update/index.tsx:94
#, c-format
-msgid "Failed to create instance"
+msgid "Could not update webhook"
msgstr ""
-#: src/components/exception/login.tsx:74
+#: src/paths/settings/index.tsx:73
#, c-format
-msgid "Login required"
+msgid "Language"
msgstr ""
-#: src/components/exception/login.tsx:80
+#: src/paths/settings/index.tsx:89
#, c-format
-msgid "Please enter your access token."
+msgid "Advance order creation"
msgstr ""
-#: src/components/exception/login.tsx:108
+#: src/paths/settings/index.tsx:90
#, c-format
-msgid "Access Token"
+msgid "Shows more options in the order creation form"
msgstr ""
-#: src/InstanceRoutes.tsx:171
+#: src/paths/settings/index.tsx:94
#, c-format
-msgid "The request to the backend take too long and was cancelled"
+msgid "Advance instance settings"
msgstr ""
-#: src/InstanceRoutes.tsx:172
+#: src/paths/settings/index.tsx:95
#, c-format
-msgid "Diagnostic from %1$s is \"%2$s\""
+msgid "Shows more options in the instance settings form"
msgstr ""
-#: src/InstanceRoutes.tsx:178
+#: src/paths/settings/index.tsx:100
#, c-format
-msgid "The backend reported a problem: HTTP status #%1$s"
+msgid "Date format"
msgstr ""
-#: src/InstanceRoutes.tsx:179
+#: src/paths/settings/index.tsx:118
#, c-format
-msgid "Diagnostic from %1$s is '%2$s'"
+msgid "How the date is going to be displayed"
msgstr ""
-#: src/InstanceRoutes.tsx:196
+#: src/paths/settings/index.tsx:121
#, c-format
-msgid "Access denied"
+msgid "Developer mode"
msgstr ""
-#: src/InstanceRoutes.tsx:197
+#: src/paths/settings/index.tsx:122
#, c-format
-msgid "The access token provided is invalid."
+msgid ""
+"Shows more options and tools which are not intended for general audience."
msgstr ""
-#: src/InstanceRoutes.tsx:212
+#: src/paths/instance/categories/list/Table.tsx:133
#, c-format
-msgid "No 'default' instance configured yet."
+msgid "Total products"
msgstr ""
-#: src/InstanceRoutes.tsx:213
+#: src/paths/instance/categories/list/Table.tsx:164
#, c-format
-msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgid "Delete selected category from the database"
msgstr ""
-#: src/InstanceRoutes.tsx:630
+#: src/paths/instance/categories/list/Table.tsx:199
#, c-format
-msgid "The access token provided is invalid"
+msgid "There are no categories yet, add more pressing the + sign"
msgstr ""
-#: src/InstanceRoutes.tsx:664
+#: src/paths/instance/categories/list/index.tsx:90
#, c-format
-msgid "Hide for today"
+msgid "Category delete successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:82
+#: src/paths/instance/categories/list/index.tsx:95
#, c-format
-msgid "Instance"
+msgid "Could not delete the category"
msgstr ""
-#: src/components/menu/SideBar.tsx:91
+#: src/paths/instance/categories/create/CreatePage.tsx:75
#, c-format
-msgid "Settings"
+msgid "Category name"
msgstr ""
-#: src/components/menu/SideBar.tsx:167
+#: src/paths/instance/categories/create/index.tsx:53
#, c-format
-msgid "Connection"
+msgid "Category added successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:209
+#: src/paths/instance/categories/create/index.tsx:59
#, c-format
-msgid "New"
+msgid "Could not add category"
msgstr ""
-#: src/components/menu/SideBar.tsx:219
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
#, c-format
-msgid "List"
+msgid "Id:"
msgstr ""
-#: src/components/menu/SideBar.tsx:234
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
#, c-format
-msgid "Log out"
+msgid "Name of the category"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
+#, c-format
+msgid "Products"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
+#, c-format
+msgid "Search by product description or id"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:71
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
#, c-format
-msgid "Check your token is valid"
+msgid "Products that this category will list."
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:90
+#: src/paths/instance/categories/update/index.tsx:93
#, c-format
-msgid "Couldn't access the server."
+msgid "Could not update category"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:91
+#: src/paths/instance/categories/update/index.tsx:95
#, c-format
-msgid "Could not infer instance id from url %1$s"
+msgid "Category id is unknown"
msgstr ""
-#: src/Application.tsx:104
+#: src/Routing.tsx:665
#, c-format
-msgid "Server not found"
+msgid "Without this the merchant backend will refuse to create new orders."
msgstr ""
-#: src/Application.tsx:118
+#: src/Routing.tsx:675
#, c-format
-msgid "Server response with an error code"
+msgid "Hide for today"
msgstr ""
-#: src/Application.tsx:120
+#: src/Routing.tsx:711
#, c-format
-msgid "Got message %1$s from %2$s"
+msgid "KYC verification needed"
msgstr ""
-#: src/Application.tsx:131
+#: src/Routing.tsx:715
#, c-format
-msgid "Response from server is unreadable, http status: %1$s"
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
msgstr ""
-#: src/Application.tsx:144
+#: src/components/menu/SideBar.tsx:167
#, c-format
-msgid "Unexpected Error"
+msgid "Configuration"
msgstr ""
-#: src/components/form/InputArray.tsx:101
+#: src/components/menu/SideBar.tsx:206
#, c-format
-msgid "The value %1$s is invalid for a payment url"
+msgid "Settings"
msgstr ""
-#: src/components/form/InputArray.tsx:110
+#: src/components/menu/SideBar.tsx:216
#, c-format
-msgid "add element to the list"
+msgid "Access token"
msgstr ""
-#: src/components/form/InputArray.tsx:112
+#: src/components/menu/SideBar.tsx:224
#, c-format
-msgid "add"
+msgid "Connection"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:233
+#, c-format
+msgid "Interface"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:274
+#, c-format
+msgid "List"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:293
+#, c-format
+msgid "Log out"
+msgstr ""
+
+#: src/paths/admin/create/index.tsx:54
+#, c-format
+msgid "Failed to create instance"
+msgstr ""
+
+#: src/Application.tsx:208
+#, c-format
+msgid "checking compatibility with server..."
+msgstr ""
+
+#: src/Application.tsx:217
+#, c-format
+msgid "Contacting the server failed"
+msgstr ""
+
+#: src/Application.tsx:229
+#, c-format
+msgid "The server version is not supported"
+msgstr ""
+
+#: src/Application.tsx:230
+#, c-format
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
msgstr ""
#: src/components/form/InputSecured.tsx:37
@@ -2730,12 +3670,22 @@ msgstr ""
msgid "Changing"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:87
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr ""
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, c-format
+msgid "Business Name"
+msgstr ""
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
#, c-format
msgid "Order ID"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:101
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
#, c-format
msgid "Payment URL"
msgstr ""
diff --git a/packages/merchant-backoffice-ui/src/i18n/es.po b/packages/merchant-backoffice-ui/src/i18n/es.po
index 58a3745ac..3457871d6 100644
--- a/packages/merchant-backoffice-ui/src/i18n/es.po
+++ b/packages/merchant-backoffice-ui/src/i18n/es.po
@@ -17,8 +17,8 @@ msgstr ""
"Project-Id-Version: Taler Wallet\n"
"Report-Msgid-Bugs-To: taler@gnu.org\n"
"POT-Creation-Date: 2016-11-23 00:00+0100\n"
-"PO-Revision-Date: 2024-06-28 00:57+0000\n"
-"Last-Translator: Luis Avalos <avalos.diaz.0577@gmail.com>\n"
+"PO-Revision-Date: 2024-11-05 22:06+0000\n"
+"Last-Translator: Stefan Kügel <stefan.kuegel@taler.net>\n"
"Language-Team: Spanish <https://weblate.taler.net/projects/gnu-taler/"
"merchant-backoffice/es/>\n"
"Language: es\n"
@@ -28,107 +28,401 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.5.5\n"
-#: src/components/modal/index.tsx:71
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr "El pedido a terminado en tiempo agotado, verifique su conexión."
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr "El pedido a sido cancelado."
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+"Se hicieron muchos pedidos al mismo servidor y esta acción a sido limitada."
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr "La respuesta del pedido no esta bien formada."
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr "No se pudo completar el pedido por problemas de red."
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr "Error inesperado en el pedido."
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr "Error inesperado."
+
+#: src/components/modal/index.tsx:81
#, c-format
msgid "Cancel"
msgstr "Cancelar"
-#: src/components/modal/index.tsx:79
+#: src/components/modal/index.tsx:89
#, c-format
msgid "%1$s"
msgstr "%1$s"
-#: src/components/modal/index.tsx:84
+#: src/components/modal/index.tsx:94
#, c-format
msgid "Close"
msgstr "Cerrar"
-#: src/components/modal/index.tsx:124
+#: src/components/modal/index.tsx:134
#, c-format
msgid "Continue"
msgstr "Continuar"
-#: src/components/modal/index.tsx:178
+#: src/components/modal/index.tsx:194
#, c-format
msgid "Clear"
msgstr "Limpiar"
-#: src/components/modal/index.tsx:190
+#: src/components/modal/index.tsx:206
#, c-format
msgid "Confirm"
msgstr "Confirmar"
-#: src/components/modal/index.tsx:296
+#: src/components/modal/index.tsx:248
#, c-format
-msgid "is not the same as the current access token"
-msgstr "no es el mismo que el token de acceso actual"
+msgid "Required"
+msgstr "Requerido"
-#: src/components/modal/index.tsx:299
+#: src/components/modal/index.tsx:250
#, c-format
-msgid "cannot be empty"
-msgstr "no puede ser vacío"
+msgid "Letter must be a JSON string"
+msgstr "Letter debe ser una cadena JSON"
-#: src/components/modal/index.tsx:301
+#: src/components/modal/index.tsx:252
#, c-format
-msgid "cannot be the same as the old token"
-msgstr "no puede ser igual al viejo token"
+msgid "JSON string is invalid"
+msgstr "La cadena JSON es invalida"
-#: src/components/modal/index.tsx:305
+#: src/components/modal/index.tsx:257
#, c-format
-msgid "is not the same"
-msgstr "no son iguales"
+msgid "Import"
+msgstr "Importar"
+
+#: src/components/modal/index.tsx:258
+#, c-format
+msgid "Importing an account from the bank"
+msgstr "Importando una cuenta desde el banco"
+
+#: src/components/modal/index.tsx:265
+#, c-format
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
+msgstr ""
+"Puedes exportar una configuracion de cuenta desde el perfil de cuenta del "
+"banco Libeufin. Pega el contenido en el próximo campo."
+
+#: src/components/modal/index.tsx:273
+#, c-format
+msgid "Account information"
+msgstr "Información de la cuenta"
+
+#: src/components/modal/index.tsx:338
+#, c-format
+msgid "Correct form"
+msgstr "Formulario correcto"
+
+#: src/components/modal/index.tsx:339
+#, c-format
+msgid "Comparing account details"
+msgstr "Comparando detalle de cuentas"
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+"Verificando contra la URL de información de cuenta exitoso pero la "
+"información de la cuenta reportada es diferente a los detalles de cuenta en "
+"el formulario."
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr "Campo"
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr "En el formulario"
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr "Reportado"
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr "Tipo"
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr "IBAN"
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr "Dirección"
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr "Host"
+
+#: src/components/modal/index.tsx:402
+#, c-format
+msgid "Account id"
+msgstr "Identificacion de cuenta"
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr "Nombre del dueno"
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr "Cuenta"
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
+msgstr "Host del banco"
+
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr "Cuenta bancaria"
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr "BIC"
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr "Ok"
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr "Validar cuenta bancaria: %1$s"
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
+msgstr ""
+"Necesitas hacer una transferencia bancaria con el asunto especificado para "
+"validar que eres el propietario de la cuenta."
+
+#: src/components/modal/index.tsx:487
+#, c-format
+msgid "Step 1:"
+msgstr "Paso 1:"
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
+msgstr ""
+"Copia este codigo y pegalo en el campo asunto de to aplicacion bancaria o "
+"sitio de banco"
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr "Asunto"
+
+#: src/components/modal/index.tsx:499
+#, c-format
+msgid "Step 2:"
+msgstr "Paso 2:"
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
+msgstr ""
+"Copia y pega este IBAN y el nombre en el campo destinatario en to aplicaion "
+"bancaria o sitio web"
+
+#: src/components/modal/index.tsx:509
+#, fuzzy, c-format
+msgid "Receiver name"
+msgstr "Fecha de entrega"
+
+#: src/components/modal/index.tsx:514
+#, c-format
+msgid "Step 3:"
+msgstr "Paso 3:"
+
+#: src/components/modal/index.tsx:516
+#, c-format
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
+msgstr ""
+"Completa la transferencia bancaria con el monto mas pequeno que puedas en tu "
+"aplicacion bancaria o sitio web."
+
+#: src/components/modal/index.tsx:536
+#, c-format
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
+msgstr ""
+"Asegurate que TODA la informacion es correcta, incuyendo el asunto y que "
+"estas usando la cuenta indicada. Puedes usar el boton copiar (%1$s) para "
+"prevenir errores de tipeo o el \"payto://\" URI debajo para copiar un solo "
+"valor."
+
+#: src/components/modal/index.tsx:549
+#, c-format
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
+msgstr ""
+"Alternativamente si tu banco soporta PayTo URI, puedes usar este %1$s link"
+
+#: src/components/modal/index.tsx:694
+#, c-format
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
+msgstr ""
+"Si eliminas la instancia con nombre %1$s (ID: %2$s), el comerciante no podrá "
+"procesar ordenes o rembolsos"
+
+#: src/components/modal/index.tsx:701
+#, c-format
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
+msgstr ""
+"Esta accion elimina la clave privada de la instancia pero preserva toda la "
+"información transaccional. Podrás acceder a esa información después de "
+"borrar la instancia."
-#: src/components/modal/index.tsx:315
+#: src/components/modal/index.tsx:708
#, c-format
-msgid "You are updating the access token from instance with id %1$s"
+msgid "Deleting an instance %1$s ."
+msgstr "Borrando la instancia %1$s."
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
+msgstr ""
+"Si purgas la instancia con nombre %1$s (ID: %2$s), tambien borraras toda su "
+"informacion transaccional."
+
+#: src/components/modal/index.tsx:743
+#, c-format
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
+msgstr ""
+"La instancia desaparecera de tu lista, y no volveras a tener acceso a su "
+"informacion."
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr "Purgando la instancia %1$s."
+
+#: src/components/modal/index.tsx:786
+#, fuzzy, c-format
+msgid "Is not the same as the current access token"
+msgstr "no es el mismo que el token de acceso actual"
+
+#: src/components/modal/index.tsx:791
+#, fuzzy, c-format
+msgid "Can't be the same as the old token"
+msgstr "no puede ser igual al viejo token"
+
+#: src/components/modal/index.tsx:795
+#, fuzzy, c-format
+msgid "Is not the same"
+msgstr "no son iguales"
+
+#: src/components/modal/index.tsx:803
+#, fuzzy, c-format
+msgid "You are updating the access token for the instance with id %1$s"
msgstr "Está actualizando el token de acceso para la instancia con id %1$s"
-#: src/components/modal/index.tsx:331
+#: src/components/modal/index.tsx:819
#, c-format
msgid "Old access token"
-msgstr "Viejo token de acceso"
+msgstr "Token de acceso viejo"
-#: src/components/modal/index.tsx:332
-#, c-format
-msgid "access token currently in use"
+#: src/components/modal/index.tsx:820
+#, fuzzy, c-format
+msgid "Access token currently in use"
msgstr "acceder al token en uso actualmente"
-#: src/components/modal/index.tsx:338
+#: src/components/modal/index.tsx:826
#, c-format
msgid "New access token"
msgstr "Nuevo token de acceso"
-#: src/components/modal/index.tsx:339
-#, c-format
-msgid "next access token to be used"
+#: src/components/modal/index.tsx:827
+#, fuzzy, c-format
+msgid "Next access token to be used"
msgstr "siguiente token de acceso a usar"
-#: src/components/modal/index.tsx:344
+#: src/components/modal/index.tsx:832
#, c-format
msgid "Repeat access token"
msgstr "Repetir token de acceso"
-#: src/components/modal/index.tsx:345
-#, c-format
-msgid "confirm the same access token"
+#: src/components/modal/index.tsx:833
+#, fuzzy, c-format
+msgid "Confirm the same access token"
msgstr "confirmar el mismo token de acceso"
-#: src/components/modal/index.tsx:350
+#: src/components/modal/index.tsx:838
#, c-format
msgid "Clearing the access token will mean public access to the instance"
msgstr "Limpiar el token de acceso significa acceso público a la instancia"
-#: src/components/modal/index.tsx:377
-#, c-format
-msgid "cannot be the same as the old access token"
+#: src/components/modal/index.tsx:865
+#, fuzzy, c-format
+msgid "Can't be the same as the old access token"
msgstr "no puede ser igual al anterior token de acceso"
-#: src/components/modal/index.tsx:394
+#: src/components/modal/index.tsx:880
#, c-format
msgid "You are setting the access token for the new instance"
msgstr "Está estableciendo el token de acceso para la nueva instancia"
-#: src/components/modal/index.tsx:420
+#: src/components/modal/index.tsx:906
#, c-format
msgid ""
"With external authorization method no check will be done by the merchant "
@@ -137,47 +431,72 @@ msgstr ""
"Con el método de autorización externa no se hará ninguna revisión por el "
"backend del comerciante"
-#: src/components/modal/index.tsx:436
+#: src/components/modal/index.tsx:922
#, c-format
msgid "Set external authorization"
msgstr "Establecer autorización externa"
-#: src/components/modal/index.tsx:448
+#: src/components/modal/index.tsx:934
#, c-format
msgid "Set access token"
msgstr "Establecer token de acceso"
-#: src/components/modal/index.tsx:470
+#: src/components/modal/index.tsx:956
#, c-format
msgid "Operation in progress..."
msgstr "Operación en progreso..."
-#: src/components/modal/index.tsx:479
+#: src/components/modal/index.tsx:965
#, c-format
msgid "The operation will be automatically canceled after %1$s seconds"
msgstr "La operación será automáticamente cancelada luego de %1$s segundos"
-#: src/paths/admin/list/TableActive.tsx:80
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr "La constrasena es incorrecta"
+
+#: src/paths/login/index.tsx:70
+#, fuzzy, c-format
+msgid "Your instance cannot be found"
+msgstr "Orden no encontrada"
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr "Login necesario"
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr "Por favor, introduzca su clave de acceso por %1$s."
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr "Token de acceso"
+
+#: src/paths/admin/list/TableActive.tsx:79
#, c-format
msgid "Instances"
msgstr "Instancias"
-#: src/paths/admin/list/TableActive.tsx:93
+#: src/paths/admin/list/TableActive.tsx:92
#, c-format
msgid "Delete"
msgstr "Borrar"
-#: src/paths/admin/list/TableActive.tsx:99
-#, c-format
-msgid "add new instance"
+#: src/paths/admin/list/TableActive.tsx:98
+#, fuzzy, c-format
+msgid "Add new instance"
msgstr "agregar nueva instancia"
-#: src/paths/admin/list/TableActive.tsx:178
+#: src/paths/admin/list/TableActive.tsx:175
#, c-format
msgid "ID"
msgstr "ID"
-#: src/paths/admin/list/TableActive.tsx:181
+#: src/paths/admin/list/TableActive.tsx:178
#, c-format
msgid "Name"
msgstr "Nombre"
@@ -193,135 +512,599 @@ msgid "Purge"
msgstr "Purgar"
#: src/paths/admin/list/TableActive.tsx:261
-#, c-format
-msgid "There is no instances yet, add more pressing the + sign"
+#, fuzzy, c-format
+msgid "There are no instances yet, add more pressing the + sign"
msgstr "Todavía no hay instancias, agregue más presionando el signo +"
-#: src/paths/admin/list/View.tsx:68
+#: src/paths/admin/list/View.tsx:66
#, c-format
msgid "Only show active instances"
msgstr "Solo mostrar instancias activas"
-#: src/paths/admin/list/View.tsx:71
+#: src/paths/admin/list/View.tsx:69
#, c-format
msgid "Active"
msgstr "Activo"
-#: src/paths/admin/list/View.tsx:78
+#: src/paths/admin/list/View.tsx:76
#, c-format
msgid "Only show deleted instances"
msgstr "Mostrar solo instancias eliminadas"
-#: src/paths/admin/list/View.tsx:81
+#: src/paths/admin/list/View.tsx:79
#, c-format
msgid "Deleted"
msgstr "Eliminado"
-#: src/paths/admin/list/View.tsx:88
+#: src/paths/admin/list/View.tsx:86
#, c-format
msgid "Show all instances"
msgstr "Mostrar todas las instancias"
-#: src/paths/admin/list/View.tsx:91
+#: src/paths/admin/list/View.tsx:89
#, c-format
msgid "All"
msgstr "Todo"
-#: src/paths/admin/list/index.tsx:101
+#: src/paths/admin/list/index.tsx:100
#, fuzzy, c-format
msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
msgstr "La instancia '%1$s' (ID: %2$s) fue eliminada"
-#: src/paths/admin/list/index.tsx:106
+#: src/paths/admin/list/index.tsx:105
#, c-format
msgid "Failed to delete instance"
msgstr "Fallo al eliminar instancia"
-#: src/paths/admin/list/index.tsx:124
-#, c-format
-msgid "Instance '%1$s' (ID: %2$s) has been disabled"
+#: src/paths/admin/list/index.tsx:140
+#, fuzzy, c-format
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
msgstr "Instance '%1$s' (ID: %2$s) ha sido deshabilitada"
-#: src/paths/admin/list/index.tsx:129
+#: src/paths/admin/list/index.tsx:145
#, c-format
msgid "Failed to purge instance"
msgstr "Fallo al purgar la instancia"
-#: src/paths/instance/kyc/list/ListPage.tsx:41
+#: src/components/exception/AsyncButton.tsx:43
#, c-format
-msgid "Pending KYC verification"
-msgstr "Verificación KYC pendiente"
+msgid "Loading..."
+msgstr "Cargando..."
-#: src/paths/instance/kyc/list/ListPage.tsx:66
+#: src/components/form/InputPaytoForm.tsx:86
#, c-format
-msgid "Timed out"
-msgstr "Expirado"
+msgid "This is not a valid bitcoin address."
+msgstr "Esta no es una dirección de bitcoin válida."
-#: src/paths/instance/kyc/list/ListPage.tsx:103
+#: src/components/form/InputPaytoForm.tsx:99
#, c-format
-msgid "Exchange"
-msgstr "Exchange"
+msgid "This is not a valid Ethereum address."
+msgstr "Esta no es una dirección de Ethereum válida."
-#: src/paths/instance/kyc/list/ListPage.tsx:106
+#: src/components/form/InputPaytoForm.tsx:128
+#, fuzzy, c-format
+msgid "This is not a valid host."
+msgstr "Esta no es una dirección de bitcoin válida."
+
+#: src/components/form/InputPaytoForm.tsx:151
#, c-format
-msgid "Target account"
-msgstr "Cuenta objetivo"
+msgid "IBAN numbers usually have more that 4 digits"
+msgstr "Los números IBAN usualmente tienen mas de 4 digitos"
-#: src/paths/instance/kyc/list/ListPage.tsx:109
+#: src/components/form/InputPaytoForm.tsx:153
#, c-format
-msgid "KYC URL"
-msgstr "URL de KYC"
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr "Los números IBAN usualmente tienen menos de 34 digitos"
-#: src/paths/instance/kyc/list/ListPage.tsx:144
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr "Código de pais de IBAN no encontrado"
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, fuzzy, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr "El número IBAN no es válido, falló la verificación"
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr "Elija uno..."
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr "Método a usar para la transferencia"
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr "Enrutamiento"
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr "Número de enrutamiento."
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr "Numero de cuenta"
+
+#: src/components/form/InputPaytoForm.tsx:330
#, c-format
msgid "Code"
msgstr "Código"
-#: src/paths/instance/kyc/list/ListPage.tsx:147
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr "Código de identificación de la empresa."
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, fuzzy, c-format
+msgid "International Bank Account Number."
+msgstr "Número de cuenta bancaria."
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr "Interfaz de pago unificado."
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr "Protocolo Bitcoin."
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr "Protocolo Ethereum."
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr "Protocolo Interledger."
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr "Host del banco."
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr "Sin el esquema y puede incluir subpath:"
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr "Cuenta bancaria."
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr "Nombre legal de la persona titular de la cuenta."
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr "Deberia coincidir con el nombre de la cuenta."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, fuzzy, c-format
+msgid "Invalid url"
+msgstr "formato inválido"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr "La URL que debe terminar con '/'"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr "La URL no debe contener parametros"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr "La URL no debe contener hash"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr "El pedido para verificar el API fallo."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr "El servidor responde con un código de error."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr "Sin autorizacion, revisar credenciales."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, fuzzy, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr "El endpoint no parece pertenecer al API Taler Revenue."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
+msgstr ""
+"El request tuvo exito pero el server no respondio con el campo "
+"\"credit_account\" asi que no podemos verificar que sea la misma cuenta."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr "Cuenta:"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
+msgstr ""
+"Si el banco soporta el API Taler Revenue entonces puedes agregar el endpoint "
+"URL debajo para mantener la informacion de ganancias sincronizada."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr "URL endpoint"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
+msgstr ""
+"Desde donde el comerciante puede descargar informacion acerca de las "
+"transferencias bancarias entrantes hacia esta cuenta"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, fuzzy, c-format
+msgid "Auth type"
+msgstr "Tipo de evento"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr "Verifica el tipo de autenticacion para la URL de infomacion de cuenta"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr "Sin autenticacion"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr "Con contrasena"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, fuzzy, c-format
+msgid "With token"
+msgstr "Crear token"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, fuzzy, c-format
+msgid "Do not change"
+msgstr "URL del proveedor"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr "Usuario"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr "Usuario para cceder a la informacion de la cuenta."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr "Contrasena"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr "Contrasena para acceder a la informacion de la cuenta."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr "Token"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr "Token de acceso para acceder a la informacion de la cuenta."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr "Coincidencia"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr "Verifica si la informacion con el servidor coincide."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, fuzzy, c-format
+msgid "Not verified"
+msgstr "Sin verificar"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr "La ultima prueba fue exitosa"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr "La ultima prueba fallo"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr "Comparar la informacion del servidor con el formulario de la cuenta"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr "Probar"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr "Necesita completar los campos marcados"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, fuzzy, c-format
+msgid "Confirm operation"
+msgstr "Confirmado"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, fuzzy, c-format
+msgid "Account details"
+msgstr "Dirección de cuenta"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr "Importar desde el banco"
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, fuzzy, c-format
+msgid "Could not create account"
+msgstr "no se pudo crear el producto"
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr "No se ha configurado una instancia por 'defecto' todavía."
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgstr ""
+"Cree una instancia \"por defecto\" para empezar a utilizar el backoffice "
+"comerciante."
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, fuzzy, c-format
+msgid "Bank accounts"
+msgstr "Cuenta bancaria"
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, fuzzy, c-format
+msgid "Add new account"
+msgstr "Abono en cuenta bancaria"
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, fuzzy, c-format
+msgid "Wire method: Bitcoin"
+msgstr "Método de transferencia"
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, fuzzy, c-format
+msgid "Delete selected accounts from the database"
+msgstr "eliminar transferencia seleccionada de la base de datos"
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, fuzzy, c-format
+msgid "Wire method: x-taler-bank"
+msgstr "Método de transferencia"
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, fuzzy, c-format
+msgid "Account name"
+msgstr "Dirección de la cuenta"
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, fuzzy, c-format
+msgid "Wire method: IBAN"
+msgstr "Método de transferencia"
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, fuzzy, c-format
+msgid "Other accounts"
+msgstr "Cuenta objetivo"
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, fuzzy, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr "No existen productos todavía, añadir más pulsando el símbolo +"
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, fuzzy, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr "URI que especifica la cuenta bancaria para acreditar los ingresos."
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr "Sin esto, no podrá crear nuevos pedidos."
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr "La cuenta bancaria se ha eliminado correctamente."
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr "No se pudo eliminar la cuenta bancaria"
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr "No se ha podido actualizar la cuenta"
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr "No se pudo eliminar la cuenta"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr "Verificación KYC pendiente"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr "Exchange"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format, fuzzy
+msgid "Reason"
+msgstr "Razón"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
+msgstr "Proceso de KYC pendiente, click aqui para completar"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:140
+#, c-format
+msgid "The exchange require a account verification."
+msgstr "El exchange require una verificacion de la cuenta."
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
#, c-format
msgid "Http Status"
msgstr "Estado http"
-#: src/paths/instance/kyc/list/ListPage.tsx:177
+#: src/paths/instance/kyc/list/ListPage.tsx:199
#, c-format
msgid "No pending kyc verification!"
msgstr "¡No hay verificación kyc pendiente!"
-#: src/components/form/InputDate.tsx:123
-#, c-format
-msgid "change value to unknown date"
+#: src/components/form/InputDate.tsx:127
+#, fuzzy, c-format
+msgid "Change value to unknown date"
msgstr "cambiar valor a fecha desconocida"
-#: src/components/form/InputDate.tsx:124
-#, c-format
-msgid "change value to empty"
+#: src/components/form/InputDate.tsx:128
+#, fuzzy, c-format
+msgid "Change value to empty"
msgstr "cambiar valor a vacío"
-#: src/components/form/InputDate.tsx:131
+#: src/components/form/InputDate.tsx:140
+#, fuzzy, c-format
+msgid "Change value to never"
+msgstr "cambiar valor a nunca"
+
+#: src/components/form/InputDate.tsx:145
+#, fuzzy, c-format
+msgid "Never"
+msgstr "nunca"
+
+#: src/components/picker/DurationPicker.tsx:55
#, c-format
-msgid "clear"
-msgstr "limpiar"
+msgid "days"
+msgstr "días"
-#: src/components/form/InputDate.tsx:136
+#: src/components/picker/DurationPicker.tsx:65
#, c-format
-msgid "change value to never"
-msgstr "cambiar valor a nunca"
+msgid "hours"
+msgstr "horas"
-#: src/components/form/InputDate.tsx:141
+#: src/components/picker/DurationPicker.tsx:76
#, c-format
-msgid "never"
-msgstr "nunca"
+msgid "minutes"
+msgstr "minutos"
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr "segundos"
+
+#: src/components/form/InputDuration.tsx:62
+#, fuzzy, c-format
+msgid "Forever"
+msgstr "por siempre"
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr "%1$sM"
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr "%1$sA"
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr "%1$sd"
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr "%1$sh"
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr "%1$smin"
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr "%1$sseg"
#: src/components/form/InputLocation.tsx:29
#, c-format
msgid "Country"
msgstr "País"
-#: src/components/form/InputLocation.tsx:33
-#, c-format
-msgid "Address"
-msgstr "Dirección"
-
#: src/components/form/InputLocation.tsx:39
#, c-format
msgid "Building number"
@@ -362,43 +1145,33 @@ msgstr "Distrito"
msgid "Country subdivision"
msgstr "Subdivisión de país"
-#: src/components/form/InputSearchProduct.tsx:66
-#, c-format
-msgid "Product id"
-msgstr "Id de producto"
-
-#: src/components/form/InputSearchProduct.tsx:69
+#: src/components/form/InputSearchOnList.tsx:80
#, c-format
msgid "Description"
-msgstr "Descripcion"
-
-#: src/components/form/InputSearchProduct.tsx:94
-#, c-format
-msgid "Product"
-msgstr "Producto"
+msgstr "Descripción"
-#: src/components/form/InputSearchProduct.tsx:95
-#, c-format
-msgid "search products by it's description or id"
-msgstr "buscar productos por su descripción o ID"
+#: src/components/form/InputSearchOnList.tsx:106
+#, fuzzy, c-format
+msgid "Enter description or id"
+msgstr "Insertar un ID para el pedido"
-#: src/components/form/InputSearchProduct.tsx:151
-#, c-format
-msgid "no products found with that description"
+#: src/components/form/InputSearchOnList.tsx:164
+#, fuzzy, c-format
+msgid "no match found with that description or id"
msgstr "no se encontraron productos con esa descripción"
-#: src/components/product/InventoryProductForm.tsx:56
+#: src/components/product/InventoryProductForm.tsx:57
#, c-format
msgid "You must enter a valid product identifier."
msgstr "Debe ingresar un identificador de producto válido."
-#: src/components/product/InventoryProductForm.tsx:64
+#: src/components/product/InventoryProductForm.tsx:65
#, c-format
msgid "Quantity must be greater than 0!"
msgstr "¡Cantidad debe ser mayor que 0!"
-#: src/components/product/InventoryProductForm.tsx:76
-#, fuzzy, c-format
+#: src/components/product/InventoryProductForm.tsx:77
+#, c-format
msgid ""
"This quantity exceeds remaining stock. Currently, only %1$s units remain "
"unreserved in stock."
@@ -406,47 +1179,62 @@ msgstr ""
"Esta cantidad excede las existencias restantes. Actualmente, solo quedan "
"%1$s unidades sin reservar en las existencias."
-#: src/components/product/InventoryProductForm.tsx:109
+#: src/components/product/InventoryProductForm.tsx:100
+#, fuzzy, c-format
+msgid "Search product"
+msgstr "Productos de inventario"
+
+#: src/components/product/InventoryProductForm.tsx:112
#, c-format
msgid "Quantity"
msgstr "Cantidad"
-#: src/components/product/InventoryProductForm.tsx:110
-#, c-format
-msgid "how many products will be added"
+#: src/components/product/InventoryProductForm.tsx:113
+#, fuzzy, c-format
+msgid "How many products will be added"
msgstr "cuántos productos serán agregados"
-#: src/components/product/InventoryProductForm.tsx:117
+#: src/components/product/InventoryProductForm.tsx:120
#, c-format
msgid "Add from inventory"
msgstr "Agregar del inventario"
-#: src/components/form/InputImage.tsx:105
-#, c-format
-msgid "Image should be smaller than 1 MB"
+#: src/components/form/InputImage.tsx:107
+#, fuzzy, c-format
+msgid "Image must be smaller than 1 MB"
msgstr "La imagen debe ser mas chica que 1 MB"
-#: src/components/form/InputImage.tsx:110
+#: src/components/form/InputImage.tsx:112
#, c-format
msgid "Add"
msgstr "Agregar"
-#: src/components/form/InputImage.tsx:115
+#: src/components/form/InputImage.tsx:122
#, c-format
msgid "Remove"
msgstr "Eliminar"
-#: src/components/form/InputTaxes.tsx:113
+#: src/components/form/InputTaxes.tsx:47
+#, fuzzy, c-format
+msgid "Invalid"
+msgstr "no válido"
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr "Este producto tiene %1$s impuestos aplicables configurados."
+
+#: src/components/form/InputTaxes.tsx:103
#, c-format
msgid "No taxes configured for this product."
msgstr "Ningun impuesto configurado para este producto."
-#: src/components/form/InputTaxes.tsx:119
+#: src/components/form/InputTaxes.tsx:109
#, c-format
msgid "Amount"
msgstr "Monto"
-#: src/components/form/InputTaxes.tsx:120
+#: src/components/form/InputTaxes.tsx:110
#, c-format
msgid ""
"Taxes can be in currencies that differ from the main currency used by the "
@@ -455,38 +1243,48 @@ msgstr ""
"Impuestos pueden estar en divisas que difieren de la principal divisa usada "
"por el comerciante."
-#: src/components/form/InputTaxes.tsx:122
+#: src/components/form/InputTaxes.tsx:112
#, c-format
msgid ""
"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
msgstr ""
"Ingrese divisa y valor separado por dos puntos, e.g. &quot;USD:2.3&quot;."
-#: src/components/form/InputTaxes.tsx:131
+#: src/components/form/InputTaxes.tsx:121
#, c-format
msgid "Legal name of the tax, e.g. VAT or import duties."
msgstr "Nombre legal del impuesto, e.g. IVA o arancel."
-#: src/components/form/InputTaxes.tsx:137
-#, c-format
-msgid "add tax to the tax list"
+#: src/components/form/InputTaxes.tsx:127
+#, fuzzy, c-format
+msgid "Add tax to the tax list"
msgstr "agregar impuesto a la lista de impuestos"
-#: src/components/product/NonInventoryProductForm.tsx:72
-#, c-format
-msgid "describe and add a product that is not in the inventory list"
+#: src/components/product/NonInventoryProductForm.tsx:71
+#, fuzzy, c-format
+msgid "Describe and add a product that is not in the inventory list"
msgstr "describa y agregue un producto que no está en la lista de inventarios"
-#: src/components/product/NonInventoryProductForm.tsx:75
+#: src/components/product/NonInventoryProductForm.tsx:74
#, c-format
msgid "Add custom product"
msgstr "Agregue un producto personalizado"
-#: src/components/product/NonInventoryProductForm.tsx:86
+#: src/components/product/NonInventoryProductForm.tsx:85
#, c-format
msgid "Complete information of the product"
msgstr "Complete información del producto"
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, fuzzy, c-format
+msgid "Must be a number"
+msgstr "no es un número"
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, fuzzy, c-format
+msgid "Must be grater than 0"
+msgstr "debe ser mayor que 0"
+
#: src/components/product/NonInventoryProductForm.tsx:185
#, c-format
msgid "Image"
@@ -494,12 +1292,12 @@ msgstr "Imagen"
#: src/components/product/NonInventoryProductForm.tsx:186
#, c-format
-msgid "photo of the product"
-msgstr "foto del producto"
+msgid "Photo of the product."
+msgstr "foto del producto."
#: src/components/product/NonInventoryProductForm.tsx:192
-#, c-format
-msgid "full product description"
+#, fuzzy, c-format
+msgid "Full product description."
msgstr "descripción completa del producto"
#: src/components/product/NonInventoryProductForm.tsx:196
@@ -509,8 +1307,8 @@ msgstr "Unidad"
#: src/components/product/NonInventoryProductForm.tsx:197
#, c-format
-msgid "name of the product unit"
-msgstr "nombre de la unidad del producto"
+msgid "Name of the product unit."
+msgstr "nombre de la unidad del producto."
#: src/components/product/NonInventoryProductForm.tsx:201
#, c-format
@@ -519,300 +1317,266 @@ msgstr "Precio"
#: src/components/product/NonInventoryProductForm.tsx:202
#, c-format
-msgid "amount in the current currency"
-msgstr "monto de la divisa actual"
+msgid "Amount in the current currency."
+msgstr "Monto de la divisa actual."
+
+#: src/components/product/NonInventoryProductForm.tsx:208
+#, c-format
+msgid "How many products will be added."
+msgstr "Cuántos productos serán agregados."
#: src/components/product/NonInventoryProductForm.tsx:211
#, c-format
msgid "Taxes"
msgstr "Impuestos"
-#: src/components/product/ProductList.tsx:38
-#, c-format
-msgid "image"
-msgstr "imagen"
-
-#: src/components/product/ProductList.tsx:41
-#, c-format
-msgid "description"
-msgstr "descripción"
-
-#: src/components/product/ProductList.tsx:44
-#, c-format
-msgid "quantity"
-msgstr "cantidad"
-
-#: src/components/product/ProductList.tsx:47
-#, c-format
-msgid "unit price"
+#: src/components/product/ProductList.tsx:46
+#, fuzzy, c-format
+msgid "Unit price"
msgstr "precio unitario"
-#: src/components/product/ProductList.tsx:50
+#: src/components/product/ProductList.tsx:49
#, c-format
-msgid "total price"
-msgstr "precio total"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:153
-#, c-format
-msgid "required"
-msgstr "requerido"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:157
-#, c-format
-msgid "not valid"
-msgstr "no válido"
+msgid "Total price"
+msgstr "Precio total"
-#: src/paths/instance/orders/create/CreatePage.tsx:159
-#, c-format
-msgid "must be greater than 0"
+#: src/paths/instance/orders/create/CreatePage.tsx:162
+#, fuzzy, c-format
+msgid "Must be greater than 0"
msgstr "debe ser mayor que 0"
-#: src/paths/instance/orders/create/CreatePage.tsx:164
-#, c-format
-msgid "not a valid json"
-msgstr "no es un json válido"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:170
-#, c-format
-msgid "should be in the future"
-msgstr "deberían ser en el futuro"
-
#: src/paths/instance/orders/create/CreatePage.tsx:173
-#, c-format
-msgid "refund deadline cannot be before pay deadline"
+#, fuzzy, c-format
+msgid "Refund deadline can't be before pay deadline"
msgstr "plazo de reembolso no puede ser antes que el plazo de pago"
#: src/paths/instance/orders/create/CreatePage.tsx:179
-#, c-format
-msgid "wire transfer deadline cannot be before refund deadline"
+#, fuzzy, c-format
+msgid "Wire transfer deadline can't be before refund deadline"
msgstr ""
"el plazo de la transferencia bancaria no puede ser antes que el plazo de "
"reembolso"
-#: src/paths/instance/orders/create/CreatePage.tsx:190
-#, c-format
-msgid "wire transfer deadline cannot be before pay deadline"
+#: src/paths/instance/orders/create/CreatePage.tsx:188
+#, fuzzy, c-format
+msgid "Wire transfer deadline can't be before pay deadline"
msgstr ""
"el plazo de la transferencia bancaria no puede ser antes que el plazo de pago"
-#: src/paths/instance/orders/create/CreatePage.tsx:197
-#, c-format
-msgid "should have a refund deadline"
+#: src/paths/instance/orders/create/CreatePage.tsx:196
+#, fuzzy, c-format
+msgid "Must have a refund deadline"
msgstr "debería tener un plazo de reembolso"
-#: src/paths/instance/orders/create/CreatePage.tsx:202
-#, c-format
-msgid "auto refund cannot be after refund deadline"
+#: src/paths/instance/orders/create/CreatePage.tsx:201
+#, fuzzy, c-format
+msgid "Auto refund can't be after refund deadline"
msgstr "reembolso automático no puede ser después qu el plazo de reembolso"
-#: src/paths/instance/orders/create/CreatePage.tsx:360
+#: src/paths/instance/orders/create/CreatePage.tsx:208
+#, fuzzy, c-format
+msgid "Must be in the future"
+msgstr "deberían ser en el futuro"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:376
+#, c-format
+msgid "Simple"
+msgstr "Simple"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:388
+#, c-format
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:400
#, c-format
msgid "Manage products in order"
msgstr "Manejar productos en orden"
-#: src/paths/instance/orders/create/CreatePage.tsx:369
+#: src/paths/instance/orders/create/CreatePage.tsx:404
+#, c-format
+msgid "%1$s products with a total price of %2$s."
+msgstr "%1$s productos con un precio total de %2$s."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:411
#, c-format
msgid "Manage list of products in the order."
msgstr "Manejar lista de productos en la orden."
-#: src/paths/instance/orders/create/CreatePage.tsx:391
+#: src/paths/instance/orders/create/CreatePage.tsx:435
#, c-format
msgid "Remove this product from the order."
msgstr "Remover este producto de la orden."
-#: src/paths/instance/orders/create/CreatePage.tsx:415
-#, c-format
-msgid "Total price"
-msgstr "Precio total"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:417
-#, c-format
-msgid "total product price added up"
+#: src/paths/instance/orders/create/CreatePage.tsx:461
+#, fuzzy, c-format
+msgid "Total product price added up"
msgstr "precio total de producto agregado"
-#: src/paths/instance/orders/create/CreatePage.tsx:430
+#: src/paths/instance/orders/create/CreatePage.tsx:474
#, c-format
msgid "Amount to be paid by the customer"
msgstr "Monto a ser pagado por el cliente"
-#: src/paths/instance/orders/create/CreatePage.tsx:436
+#: src/paths/instance/orders/create/CreatePage.tsx:480
#, c-format
msgid "Order price"
msgstr "Precio de la orden"
-#: src/paths/instance/orders/create/CreatePage.tsx:437
-#, c-format
-msgid "final order price"
+#: src/paths/instance/orders/create/CreatePage.tsx:481
+#, fuzzy, c-format
+msgid "Final order price"
msgstr "Precio final de la orden"
-#: src/paths/instance/orders/create/CreatePage.tsx:444
+#: src/paths/instance/orders/create/CreatePage.tsx:488
#, c-format
msgid "Summary"
msgstr "Resumen"
-#: src/paths/instance/orders/create/CreatePage.tsx:445
+#: src/paths/instance/orders/create/CreatePage.tsx:489
#, c-format
msgid "Title of the order to be shown to the customer"
msgstr "Título de la orden a ser mostrado al cliente"
-#: src/paths/instance/orders/create/CreatePage.tsx:450
-#, c-format
-msgid "Shipping and Fulfillment"
+#: src/paths/instance/orders/create/CreatePage.tsx:495
+#, fuzzy, c-format
+msgid "Shipping and fulfillment"
msgstr "Envío y cumplimiento"
-#: src/paths/instance/orders/create/CreatePage.tsx:455
+#: src/paths/instance/orders/create/CreatePage.tsx:500
#, c-format
msgid "Delivery date"
msgstr "Fecha de entrega"
-#: src/paths/instance/orders/create/CreatePage.tsx:456
+#: src/paths/instance/orders/create/CreatePage.tsx:501
#, c-format
msgid "Deadline for physical delivery assured by the merchant."
msgstr "Plazo para la entrega física asegurado por el comerciante."
-#: src/paths/instance/orders/create/CreatePage.tsx:461
+#: src/paths/instance/orders/create/CreatePage.tsx:506
#, c-format
msgid "Location"
msgstr "Ubicación"
-#: src/paths/instance/orders/create/CreatePage.tsx:462
-#, c-format
-msgid "address where the products will be delivered"
+#: src/paths/instance/orders/create/CreatePage.tsx:507
+#, fuzzy, c-format
+msgid "Address where the products will be delivered"
msgstr "dirección a donde los productos serán entregados"
-#: src/paths/instance/orders/create/CreatePage.tsx:469
+#: src/paths/instance/orders/create/CreatePage.tsx:514
#, c-format
msgid "Fulfillment URL"
msgstr "URL de cumplimiento"
-#: src/paths/instance/orders/create/CreatePage.tsx:470
+#: src/paths/instance/orders/create/CreatePage.tsx:515
#, c-format
msgid "URL to which the user will be redirected after successful payment."
msgstr "URL al cual el usuario será redirigido luego de pago exitoso."
-#: src/paths/instance/orders/create/CreatePage.tsx:476
+#: src/paths/instance/orders/create/CreatePage.tsx:523
#, c-format
msgid "Taler payment options"
msgstr "Opciones de pago de Taler"
-#: src/paths/instance/orders/create/CreatePage.tsx:477
+#: src/paths/instance/orders/create/CreatePage.tsx:524
#, c-format
msgid "Override default Taler payment settings for this order"
-msgstr "Sobreescribir pagos por omisión de Taler para esta orden"
+msgstr "Sobrescribir pagos por omisión de Taler para esta orden"
-#: src/paths/instance/orders/create/CreatePage.tsx:481
+#: src/paths/instance/orders/create/CreatePage.tsx:529
#, fuzzy, c-format
-msgid "Payment deadline"
-msgstr "Plazo de pago"
+msgid "Payment time"
+msgstr "Opciones de pago"
-#: src/paths/instance/orders/create/CreatePage.tsx:482
-#, c-format
+#: src/paths/instance/orders/create/CreatePage.tsx:535
+#, fuzzy, c-format
msgid ""
-"Deadline for the customer to pay for the offer before it expires. Inventory "
-"products will be reserved until this deadline."
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
msgstr ""
"Plazo límite para que el cliente pague por la oferta antes de que expire. "
"Productos del inventario serán reservados hasta este plazo límite."
-#: src/paths/instance/orders/create/CreatePage.tsx:486
-#, c-format
-msgid "Refund deadline"
-msgstr "Plazo de reembolso"
+#: src/paths/instance/orders/create/CreatePage.tsx:552
+#, fuzzy, c-format
+msgid "Default"
+msgstr "Importe por defecto"
-#: src/paths/instance/orders/create/CreatePage.tsx:487
-#, c-format
-msgid "Time until which the order can be refunded by the merchant."
+#: src/paths/instance/orders/create/CreatePage.tsx:561
+#, fuzzy, c-format
+msgid "Refund time"
+msgstr "Reembolsado"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:569
+#, fuzzy, c-format
+msgid ""
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
msgstr ""
"Tiempo hasta el cual la orden puede ser reembolsada por el comerciante."
-#: src/paths/instance/orders/create/CreatePage.tsx:491
-#, c-format
-msgid "Wire transfer deadline"
-msgstr "Plazo de la transferencia"
+#: src/paths/instance/orders/create/CreatePage.tsx:594
+#, fuzzy, c-format
+msgid "Wire transfer time"
+msgstr "ID de la transferencia"
-#: src/paths/instance/orders/create/CreatePage.tsx:492
-#, c-format
-msgid "Deadline for the exchange to make the wire transfer."
-msgstr "Plazo para que el exchange haga la transferencia."
+#: src/paths/instance/orders/create/CreatePage.tsx:602
+#, fuzzy, c-format
+msgid ""
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
+msgstr "Plazo para que el proveedor haga la transferencia bancaria."
-#: src/paths/instance/orders/create/CreatePage.tsx:496
+#: src/paths/instance/orders/create/CreatePage.tsx:628
#, fuzzy, c-format
-msgid "Auto-refund deadline"
+msgid "Auto-refund time"
msgstr "Plazo de reembolso automático"
-#: src/paths/instance/orders/create/CreatePage.tsx:497
+#: src/paths/instance/orders/create/CreatePage.tsx:634
#, c-format
msgid ""
"Time until which the wallet will automatically check for refunds without "
"user interaction."
msgstr ""
"Tiempo hasta el cual la cartera será automáticamente revisada por reembolsos "
-"win interación por parte del usuario."
+"sin interacción por parte del usuario."
-#: src/paths/instance/orders/create/CreatePage.tsx:502
-#, c-format
-msgid "Maximum deposit fee"
-msgstr "Máxima tarifa de depósito"
+#: src/paths/instance/orders/create/CreatePage.tsx:642
+#, fuzzy, c-format
+msgid "Maximum fee"
+msgstr "Máxima tarifa de transferencia"
-#: src/paths/instance/orders/create/CreatePage.tsx:503
-#, c-format
+#: src/paths/instance/orders/create/CreatePage.tsx:643
+#, fuzzy, c-format
msgid ""
-"Maximum deposit fees the merchant is willing to cover for this order. Higher "
-"deposit fees must be covered in full by the consumer."
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
msgstr ""
"Máxima tarifa de depósito que el comerciante esta dispuesto a cubir para "
"esta orden. Mayores tarifas de depósito deben ser cubiertas completamente "
"por el consumidor."
-#: src/paths/instance/orders/create/CreatePage.tsx:507
-#, c-format
-msgid "Maximum wire fee"
-msgstr "Máxima tarifa de transferencia"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:508
-#, c-format
-msgid ""
-"Maximum aggregate wire fees the merchant is willing to cover for this order. "
-"Wire fees exceeding this amount are to be covered by the customers."
-msgstr ""
-"Máximo total de comisiones por transferencia que el vendedor está dispuesto "
-"a cubrir para este pedido. Los gastos de transferencia que superen este "
-"importe correrán a cargo del cliente."
-
-#: src/paths/instance/orders/create/CreatePage.tsx:512
-#, c-format
-msgid "Wire fee amortization"
-msgstr "Amortización de comisión de transferencia"
-
-#: src/paths/instance/orders/create/CreatePage.tsx:513
+#: src/paths/instance/orders/create/CreatePage.tsx:649
#, c-format
-msgid ""
-"Factor by which wire fees exceeding the above threshold are divided to "
-"determine the share of excess wire fees to be paid explicitly by the "
-"consumer."
-msgstr ""
-"Factor por el que se dividen los comisiones por transferencia que superan el "
-"umbral anterior para determinar la parte del exceso de comisiones por "
-"transferencia que debe pagar explícitamente el consumidor."
-
-#: src/paths/instance/orders/create/CreatePage.tsx:517
-#, fuzzy, c-format
msgid "Create token"
-msgstr "Administrar token"
+msgstr "Crear token"
-#: src/paths/instance/orders/create/CreatePage.tsx:518
-#, c-format
+#: src/paths/instance/orders/create/CreatePage.tsx:650
+#, fuzzy, c-format
msgid ""
-"Uncheck this option if the merchant backend generated an order ID with "
-"enough entropy to prevent adversarial claims."
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
msgstr ""
+"Si el ID de orden es facil de adivinar el token previene que los usuarios "
+"puedan robar ordenes de otras personas."
-#: src/paths/instance/orders/create/CreatePage.tsx:522
+#: src/paths/instance/orders/create/CreatePage.tsx:656
#, c-format
msgid "Minimum age required"
msgstr "Edad mínima requerida"
-#: src/paths/instance/orders/create/CreatePage.tsx:523
+#: src/paths/instance/orders/create/CreatePage.tsx:657
#, c-format
msgid ""
"Any value greater than 0 will limit the coins able be used to pay this "
@@ -822,81 +1586,66 @@ msgstr ""
"para pagar este contrato. Si está vacío, la restricción de edad vendrá "
"definida por los productos"
-#: src/paths/instance/orders/create/CreatePage.tsx:526
+#: src/paths/instance/orders/create/CreatePage.tsx:660
#, c-format
msgid "Min age defined by the producs is %1$s"
msgstr "La edad mínima definida por el producto es%1$s"
-#: src/paths/instance/orders/create/CreatePage.tsx:534
-#, fuzzy, c-format
+#: src/paths/instance/orders/create/CreatePage.tsx:661
+#, c-format
+msgid "No product with age restriction in this order"
+msgstr "No hay productos con restriccion de edad en esta orden"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:671
+#, c-format
msgid "Additional information"
-msgstr "Información extra"
+msgstr "Información adicional"
-#: src/paths/instance/orders/create/CreatePage.tsx:535
+#: src/paths/instance/orders/create/CreatePage.tsx:672
#, c-format
msgid "Custom information to be included in the contract for this order."
msgstr ""
"Información personalizada que debe incluirse en el contrato para este pedido."
-#: src/paths/instance/orders/create/CreatePage.tsx:541
+#: src/paths/instance/orders/create/CreatePage.tsx:681
#, c-format
msgid "You must enter a value in JavaScript Object Notation (JSON)."
msgstr "Debes introducir un valor en JavaScript Object Notation (JSON)."
-#: src/components/picker/DurationPicker.tsx:55
-#, c-format
-msgid "days"
-msgstr "días"
-
-#: src/components/picker/DurationPicker.tsx:65
-#, c-format
-msgid "hours"
-msgstr "horas"
-
-#: src/components/picker/DurationPicker.tsx:76
-#, c-format
-msgid "minutes"
-msgstr "minutos"
-
-#: src/components/picker/DurationPicker.tsx:87
-#, c-format
-msgid "seconds"
-msgstr "segundos"
-
-#: src/components/form/InputDuration.tsx:53
-#, c-format
-msgid "forever"
-msgstr "por siempre"
+#: src/paths/instance/orders/create/CreatePage.tsx:707
+#, fuzzy, c-format
+msgid "Custom field name"
+msgstr "Nombre de edificio"
-#: src/components/form/InputDuration.tsx:62
+#: src/paths/instance/orders/create/CreatePage.tsx:793
#, c-format
-msgid "%1$sM"
-msgstr "%1$sM"
+msgid "Disabled"
+msgstr "Inhabilitado"
-#: src/components/form/InputDuration.tsx:64
-#, c-format
-msgid "%1$sY"
-msgstr "%1$sA"
+#: src/paths/instance/orders/create/CreatePage.tsx:796
+#, fuzzy, c-format
+msgid "No deadline"
+msgstr "Plazo de reembolso"
-#: src/components/form/InputDuration.tsx:66
+#: src/paths/instance/orders/create/CreatePage.tsx:797
#, c-format
-msgid "%1$sd"
-msgstr "%1$sd"
+msgid "Deadline at %1$s"
+msgstr "Expiracion en %1$s"
-#: src/components/form/InputDuration.tsx:68
-#, c-format
-msgid "%1$sh"
-msgstr "%1$sh"
+#: src/paths/instance/orders/create/index.tsx:109
+#, fuzzy, c-format
+msgid "Could not create order"
+msgstr "no se pudo crear la reserva"
-#: src/components/form/InputDuration.tsx:70
+#: src/paths/instance/orders/create/index.tsx:111
#, c-format
-msgid "%1$smin"
-msgstr "%1$smin"
+msgid "No exchange would accept a payment because of KYC requirements."
+msgstr "Ningun exchange aceptara pagos debido a requerimientos de KYC."
-#: src/components/form/InputDuration.tsx:72
-#, c-format
-msgid "%1$ssec"
-msgstr "%1$sseg"
+#: src/paths/instance/orders/create/index.tsx:129
+#, fuzzy, c-format
+msgid "No more stock for product with ID \"%1$s\"."
+msgstr "No hay mas stock del producto con id \"%1$s\"."
#: src/paths/instance/orders/list/Table.tsx:75
#, c-format
@@ -904,329 +1653,297 @@ msgid "Orders"
msgstr "Órdenes"
#: src/paths/instance/orders/list/Table.tsx:81
-#, c-format
-msgid "create order"
+#, fuzzy, c-format
+msgid "Create order"
msgstr "crear orden"
-#: src/paths/instance/orders/list/Table.tsx:147
+#: src/paths/instance/orders/list/Table.tsx:138
#, c-format
-msgid "load newer orders"
-msgstr "cargar nuevas ordenes"
+msgid "Load first page"
+msgstr "Cargar primera pagina"
-#: src/paths/instance/orders/list/Table.tsx:154
+#: src/paths/instance/orders/list/Table.tsx:145
#, c-format
msgid "Date"
msgstr "Fecha"
-#: src/paths/instance/orders/list/Table.tsx:200
+#: src/paths/instance/orders/list/Table.tsx:191
#, c-format
msgid "Refund"
msgstr "Devolución"
-#: src/paths/instance/orders/list/Table.tsx:209
+#: src/paths/instance/orders/list/Table.tsx:200
#, c-format
msgid "copy url"
msgstr "copiar url"
-#: src/paths/instance/orders/list/Table.tsx:225
+#: src/paths/instance/orders/list/Table.tsx:213
+#, fuzzy, c-format
+msgid "Load more orders after the last one"
+msgstr "cargue más transferencia luego de la última"
+
+#: src/paths/instance/orders/list/Table.tsx:216
#, c-format
-msgid "load older orders"
-msgstr "cargar viejas ordenes"
+msgid "Load next page"
+msgstr "Cargar siguiente pagina"
-#: src/paths/instance/orders/list/Table.tsx:242
+#: src/paths/instance/orders/list/Table.tsx:233
#, c-format
msgid "No orders have been found matching your query!"
msgstr "¡No se encontraron órdenes que emparejen su búsqueda!"
-#: src/paths/instance/orders/list/Table.tsx:288
-#, c-format
-msgid "duplicated"
+#: src/paths/instance/orders/list/Table.tsx:280
+#, fuzzy, c-format
+msgid "Duplicated"
msgstr "duplicado"
-#: src/paths/instance/orders/list/Table.tsx:299
-#, c-format
-msgid "invalid format"
-msgstr "formato inválido"
-
-#: src/paths/instance/orders/list/Table.tsx:301
-#, c-format
-msgid "this value exceed the refundable amount"
+#: src/paths/instance/orders/list/Table.tsx:293
+#, fuzzy, c-format
+msgid "This value exceed the refundable amount"
msgstr "este monto excede el monto reembolsable"
-#: src/paths/instance/orders/list/Table.tsx:346
-#, c-format
-msgid "date"
-msgstr "fecha"
-
-#: src/paths/instance/orders/list/Table.tsx:349
-#, c-format
-msgid "amount"
-msgstr "monto"
-
-#: src/paths/instance/orders/list/Table.tsx:352
-#, c-format
-msgid "reason"
-msgstr "razón"
-
-#: src/paths/instance/orders/list/Table.tsx:389
-#, c-format
-msgid "amount to be refunded"
+#: src/paths/instance/orders/list/Table.tsx:381
+#, fuzzy, c-format
+msgid "Amount to be refunded"
msgstr "monto a ser reembolsado"
-#: src/paths/instance/orders/list/Table.tsx:391
+#: src/paths/instance/orders/list/Table.tsx:383
#, c-format
msgid "Max refundable:"
msgstr "Máximo reembolzable:"
-#: src/paths/instance/orders/list/Table.tsx:396
-#, c-format
-msgid "Reason"
-msgstr "Razón"
-
-#: src/paths/instance/orders/list/Table.tsx:397
-#, c-format
-msgid "Choose one..."
-msgstr "Elija uno..."
-
-#: src/paths/instance/orders/list/Table.tsx:399
-#, c-format
-msgid "requested by the customer"
+#: src/paths/instance/orders/list/Table.tsx:391
+#, fuzzy, c-format
+msgid "Requested by the customer"
msgstr "pedido por el consumidor"
-#: src/paths/instance/orders/list/Table.tsx:400
-#, c-format
-msgid "other"
+#: src/paths/instance/orders/list/Table.tsx:392
+#, fuzzy, c-format
+msgid "Other"
msgstr "otro"
-#: src/paths/instance/orders/list/Table.tsx:403
-#, c-format
-msgid "why this order is being refunded"
+#: src/paths/instance/orders/list/Table.tsx:395
+#, fuzzy, c-format
+msgid "Why this order is being refunded"
msgstr "por qué esta orden está siendo reembolsada"
-#: src/paths/instance/orders/list/Table.tsx:409
-#, c-format
-msgid "more information to give context"
+#: src/paths/instance/orders/list/Table.tsx:401
+#, fuzzy, c-format
+msgid "More information to give context"
msgstr "más información para dar contexto"
-#: src/paths/instance/orders/details/DetailPage.tsx:62
-#, c-format
-msgid "Contract Terms"
+#: src/paths/instance/orders/details/DetailPage.tsx:70
+#, fuzzy, c-format
+msgid "Contract terms"
msgstr "Términos de contrato"
-#: src/paths/instance/orders/details/DetailPage.tsx:68
-#, c-format
-msgid "human-readable description of the whole purchase"
+#: src/paths/instance/orders/details/DetailPage.tsx:76
+#, fuzzy, c-format
+msgid "Human-readable description of the whole purchase"
msgstr "descripción legible de toda la compra"
-#: src/paths/instance/orders/details/DetailPage.tsx:74
-#, c-format
-msgid "total price for the transaction"
+#: src/paths/instance/orders/details/DetailPage.tsx:82
+#, fuzzy, c-format
+msgid "Total price for the transaction"
msgstr "precio total de la transacción"
-#: src/paths/instance/orders/details/DetailPage.tsx:81
+#: src/paths/instance/orders/details/DetailPage.tsx:89
#, c-format
msgid "URL for this purchase"
msgstr "URL para esta compra"
-#: src/paths/instance/orders/details/DetailPage.tsx:87
+#: src/paths/instance/orders/details/DetailPage.tsx:95
#, c-format
msgid "Max fee"
msgstr "Máxima comisión"
-#: src/paths/instance/orders/details/DetailPage.tsx:88
-#, c-format
-msgid "maximum total deposit fee accepted by the merchant for this contract"
+#: src/paths/instance/orders/details/DetailPage.tsx:96
+#, fuzzy, c-format
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
msgstr ""
"tasa máxima total de depósito aceptada por el comerciante para este contrato"
-#: src/paths/instance/orders/details/DetailPage.tsx:93
-#, c-format
-msgid "Max wire fee"
-msgstr "Impuesto de transferencia máximo"
-
-#: src/paths/instance/orders/details/DetailPage.tsx:94
-#, c-format
-msgid "maximum wire fee accepted by the merchant"
-msgstr "comisión máxima por transferencia aceptada por el comerciante"
-
-#: src/paths/instance/orders/details/DetailPage.tsx:100
-#, c-format
-msgid ""
-"over how many customer transactions does the merchant expect to amortize "
-"wire fees on average"
-msgstr ""
-
-#: src/paths/instance/orders/details/DetailPage.tsx:105
+#: src/paths/instance/orders/details/DetailPage.tsx:101
#, c-format
msgid "Created at"
msgstr "Creado en"
-#: src/paths/instance/orders/details/DetailPage.tsx:106
-#, c-format
-msgid "time when this contract was generated"
+#: src/paths/instance/orders/details/DetailPage.tsx:102
+#, fuzzy, c-format
+msgid "Time when this contract was generated"
msgstr "momento en que se generó este contrato"
-#: src/paths/instance/orders/details/DetailPage.tsx:112
+#: src/paths/instance/orders/details/DetailPage.tsx:107
#, c-format
-msgid "after this deadline has passed no refunds will be accepted"
+msgid "Refund deadline"
+msgstr "Plazo de reembolso"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:108
+#, fuzzy, c-format
+msgid "After this deadline has passed no refunds will be accepted"
msgstr "pasado este plazo no se aceptarán devoluciones"
-#: src/paths/instance/orders/details/DetailPage.tsx:118
-#, c-format
+#: src/paths/instance/orders/details/DetailPage.tsx:113
+#, fuzzy, c-format
+msgid "Payment deadline"
+msgstr "Plazo de pago"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:114
+#, fuzzy, c-format
msgid ""
-"after this deadline, the merchant won't accept payments for the contract"
+"After this deadline, the merchant won't accept payments for the contract"
msgstr "pasado este plazo, el comerciante no aceptará pagos por el contrato"
-#: src/paths/instance/orders/details/DetailPage.tsx:124
+#: src/paths/instance/orders/details/DetailPage.tsx:119
#, c-format
-msgid "transfer deadline for the exchange"
-msgstr "plazo de transferencia para el intercambio"
+msgid "Wire transfer deadline"
+msgstr "Plazo de la transferencia bancaria"
-#: src/paths/instance/orders/details/DetailPage.tsx:130
-#, c-format
-msgid "time indicating when the order should be delivered"
-msgstr ""
+#: src/paths/instance/orders/details/DetailPage.tsx:120
+#, fuzzy, c-format
+msgid "Transfer deadline for the exchange"
+msgstr "plazo de transferencia para el proveedor"
-#: src/paths/instance/orders/details/DetailPage.tsx:136
-#, c-format
-msgid "where the order will be delivered"
-msgstr "dónde se entregará el pedido"
+#: src/paths/instance/orders/details/DetailPage.tsx:126
+#, fuzzy, c-format
+msgid "Time indicating when the order should be delivered"
+msgstr "fecha en la que debe entregarse el pedido"
-#: src/paths/instance/orders/details/DetailPage.tsx:144
+#: src/paths/instance/orders/details/DetailPage.tsx:132
#, fuzzy, c-format
+msgid "Where the order will be delivered"
+msgstr "dónde se entregará el pedido"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:140
+#, c-format
msgid "Auto-refund delay"
msgstr "Plazo de reembolso automático"
-#: src/paths/instance/orders/details/DetailPage.tsx:145
-#, c-format
+#: src/paths/instance/orders/details/DetailPage.tsx:141
+#, fuzzy, c-format
msgid ""
-"how long the wallet should try to get an automatic refund for the purchase"
+"How long the wallet should try to get an automatic refund for the purchase"
msgstr ""
"cuánto tiempo debe intentar la cartera obtener el reembolso automático de la "
"compra"
-#: src/paths/instance/orders/details/DetailPage.tsx:150
-#, fuzzy, c-format
+#: src/paths/instance/orders/details/DetailPage.tsx:146
+#, c-format
msgid "Extra info"
-msgstr "Información extra"
+msgstr "Información adicional"
-#: src/paths/instance/orders/details/DetailPage.tsx:151
-#, c-format
-msgid "extra data that is only interpreted by the merchant frontend"
+#: src/paths/instance/orders/details/DetailPage.tsx:147
+#, fuzzy, c-format
+msgid "Extra data that is only interpreted by the merchant frontend"
msgstr ""
"datos adicionales que solo son interpretados por la interfaz del comerciante"
-#: src/paths/instance/orders/details/DetailPage.tsx:219
+#: src/paths/instance/orders/details/DetailPage.tsx:220
#, c-format
msgid "Order"
msgstr "Orden"
-#: src/paths/instance/orders/details/DetailPage.tsx:221
-#, c-format
-msgid "claimed"
+#: src/paths/instance/orders/details/DetailPage.tsx:222
+#, fuzzy, c-format
+msgid "Claimed"
msgstr "reclamado"
-#: src/paths/instance/orders/details/DetailPage.tsx:247
+#: src/paths/instance/orders/details/DetailPage.tsx:249
#, fuzzy, c-format
-msgid "claimed at"
-msgstr "reclamado"
+msgid "Claimed at"
+msgstr "reclamado en"
-#: src/paths/instance/orders/details/DetailPage.tsx:265
+#: src/paths/instance/orders/details/DetailPage.tsx:271
#, c-format
msgid "Timeline"
msgstr "Cronología"
-#: src/paths/instance/orders/details/DetailPage.tsx:271
+#: src/paths/instance/orders/details/DetailPage.tsx:277
#, c-format
msgid "Payment details"
msgstr "Detalles de pago"
-#: src/paths/instance/orders/details/DetailPage.tsx:291
+#: src/paths/instance/orders/details/DetailPage.tsx:297
#, c-format
msgid "Order status"
msgstr "Estado de orden"
-#: src/paths/instance/orders/details/DetailPage.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:307
#, c-format
msgid "Product list"
msgstr "Lista de producto"
-#: src/paths/instance/orders/details/DetailPage.tsx:451
+#: src/paths/instance/orders/details/DetailPage.tsx:459
#, c-format
-msgid "paid"
-msgstr "pagados"
+msgid "Paid"
+msgstr "Pagado"
-#: src/paths/instance/orders/details/DetailPage.tsx:455
-#, c-format
-msgid "wired"
+#: src/paths/instance/orders/details/DetailPage.tsx:463
+#, fuzzy, c-format
+msgid "Wired"
msgstr "transferido"
-#: src/paths/instance/orders/details/DetailPage.tsx:460
+#: src/paths/instance/orders/details/DetailPage.tsx:468
#, c-format
-msgid "refunded"
-msgstr "reembolzado"
+msgid "Refunded"
+msgstr "Reembolsado"
-#: src/paths/instance/orders/details/DetailPage.tsx:480
-#, c-format
-msgid "refund order"
+#: src/paths/instance/orders/details/DetailPage.tsx:488
+#, fuzzy, c-format
+msgid "Refund order"
msgstr "reembolsado"
-#: src/paths/instance/orders/details/DetailPage.tsx:481
+#: src/paths/instance/orders/details/DetailPage.tsx:489
#, fuzzy, c-format
-msgid "not refundable"
-msgstr "Máximo reembolzable:"
+msgid "Not refundable"
+msgstr "No reembolsable"
-#: src/paths/instance/orders/details/DetailPage.tsx:489
+#: src/paths/instance/orders/details/DetailPage.tsx:519
#, c-format
-msgid "refund"
-msgstr "reembolzar"
+msgid "Next event in"
+msgstr "Proximo evento en"
-#: src/paths/instance/orders/details/DetailPage.tsx:553
+#: src/paths/instance/orders/details/DetailPage.tsx:555
#, c-format
msgid "Refunded amount"
msgstr "Monto reembolsado"
-#: src/paths/instance/orders/details/DetailPage.tsx:560
+#: src/paths/instance/orders/details/DetailPage.tsx:562
#, c-format
msgid "Refund taken"
msgstr "Reembolsado"
-#: src/paths/instance/orders/details/DetailPage.tsx:570
-#, fuzzy, c-format
+#: src/paths/instance/orders/details/DetailPage.tsx:572
+#, c-format
msgid "Status URL"
-msgstr "URL de estado de orden"
+msgstr "Estado de la URL"
-#: src/paths/instance/orders/details/DetailPage.tsx:583
-#, fuzzy, c-format
+#: src/paths/instance/orders/details/DetailPage.tsx:585
+#, c-format
msgid "Refund URI"
-msgstr "Devolución"
+msgstr "URI de devolución"
-#: src/paths/instance/orders/details/DetailPage.tsx:636
-#, c-format
-msgid "unpaid"
+#: src/paths/instance/orders/details/DetailPage.tsx:639
+#, fuzzy, c-format
+msgid "Unpaid"
msgstr "impago"
-#: src/paths/instance/orders/details/DetailPage.tsx:654
-#, c-format
-msgid "pay at"
+#: src/paths/instance/orders/details/DetailPage.tsx:657
+#, fuzzy, c-format
+msgid "Pay at"
msgstr "pagar en"
-#: src/paths/instance/orders/details/DetailPage.tsx:666
-#, c-format
-msgid "created at"
-msgstr "creado"
-
-#: src/paths/instance/orders/details/DetailPage.tsx:707
+#: src/paths/instance/orders/details/DetailPage.tsx:710
#, c-format
msgid "Order status URL"
msgstr "URL de estado de orden"
-#: src/paths/instance/orders/details/DetailPage.tsx:711
-#, fuzzy, c-format
+#: src/paths/instance/orders/details/DetailPage.tsx:714
+#, c-format
msgid "Payment URI"
msgstr "URI de pago"
-#: src/paths/instance/orders/details/DetailPage.tsx:740
+#: src/paths/instance/orders/details/DetailPage.tsx:743
#, c-format
msgid ""
"Unknown order status. This is an error, please contact the administrator."
@@ -1234,113 +1951,261 @@ msgstr ""
"Estado de orden desconocido. Esto es un error, por favor contacte a su "
"administrador."
-#: src/paths/instance/orders/details/DetailPage.tsx:767
+#: src/paths/instance/orders/details/DetailPage.tsx:770
#, c-format
msgid "Back"
-msgstr ""
+msgstr "Regresar"
-#: src/paths/instance/orders/details/index.tsx:79
-#, c-format
-msgid "refund created successfully"
+#: src/paths/instance/orders/details/index.tsx:88
+#, fuzzy, c-format
+msgid "Refund created successfully"
msgstr "reembolzo creado satisfactoriamente"
-#: src/paths/instance/orders/details/index.tsx:85
-#, c-format
-msgid "could not create the refund"
+#: src/paths/instance/orders/details/index.tsx:95
+#, fuzzy, c-format
+msgid "Could not create the refund"
msgstr "No se pudo create el reembolso"
-#: src/paths/instance/orders/list/ListPage.tsx:78
+#: src/paths/instance/orders/details/index.tsx:97
#, c-format
-msgid "select date to show nearby orders"
-msgstr "seleccione la fecha para mostrar pedidos cercanos"
+msgid "There are pending KYC requirements."
+msgstr "Hay requerimientos de KYC pendientes."
-#: src/paths/instance/orders/list/ListPage.tsx:94
+#: src/components/form/JumpToElementById.tsx:39
#, c-format
-msgid "order id"
-msgstr "ID de la orden"
+msgid "Missing id"
+msgstr "Falta id"
-#: src/paths/instance/orders/list/ListPage.tsx:100
-#, c-format
-msgid "jump to order with the given order ID"
-msgstr "saltar al pedido con el ID de pedido proporcionado"
+#: src/components/form/JumpToElementById.tsx:48
+#, fuzzy, c-format
+msgid "Not found"
+msgstr "Orden no encontrada"
-#: src/paths/instance/orders/list/ListPage.tsx:122
-#, c-format
-msgid "remove all filters"
-msgstr "eliminar todos los filtros"
+#: src/paths/instance/orders/list/ListPage.tsx:83
+#, fuzzy, c-format
+msgid "Select date to show nearby orders"
+msgstr "seleccione la fecha para mostrar pedidos cercanos"
-#: src/paths/instance/orders/list/ListPage.tsx:132
-#, c-format
-msgid "only show paid orders"
+#: src/paths/instance/orders/list/ListPage.tsx:96
+#, fuzzy, c-format
+msgid "Only show paid orders"
msgstr "mostrar sólo pedidos pagados"
-#: src/paths/instance/orders/list/ListPage.tsx:135
+#: src/paths/instance/orders/list/ListPage.tsx:99
#, c-format
-msgid "Paid"
-msgstr "Pagado"
+msgid "New"
+msgstr "Nuevo"
-#: src/paths/instance/orders/list/ListPage.tsx:142
+#: src/paths/instance/orders/list/ListPage.tsx:116
#, fuzzy, c-format
-msgid "only show orders with refunds"
-msgstr "No se pudo create el reembolso"
+msgid "Only show orders with refunds"
+msgstr "mostrar solo pedidos con reembolso"
-#: src/paths/instance/orders/list/ListPage.tsx:145
-#, c-format
-msgid "Refunded"
-msgstr "Reembolsado"
-
-#: src/paths/instance/orders/list/ListPage.tsx:152
-#, c-format
+#: src/paths/instance/orders/list/ListPage.tsx:126
+#, fuzzy, c-format
msgid ""
-"only show orders where customers paid, but wire payments from payment "
+"Only show orders where customers paid, but wire payments from payment "
"provider are still pending"
msgstr ""
"mostrar sólo los pedidos en los que los clientes han pagado, pero los pagos "
"por transferencia del proveedor de pago siguen pendientes"
-#: src/paths/instance/orders/list/ListPage.tsx:155
+#: src/paths/instance/orders/list/ListPage.tsx:129
#, c-format
msgid "Not wired"
msgstr "No transferido"
-#: src/paths/instance/orders/list/ListPage.tsx:170
-#, c-format
-msgid "clear date filter"
+#: src/paths/instance/orders/list/ListPage.tsx:139
+#, fuzzy, c-format
+msgid "Completed"
+msgstr "Eliminado"
+
+#: src/paths/instance/orders/list/ListPage.tsx:146
+#, fuzzy, c-format
+msgid "Remove all filters"
+msgstr "eliminar todos los filtros"
+
+#: src/paths/instance/orders/list/ListPage.tsx:164
+#, fuzzy, c-format
+msgid "Clear date filter"
msgstr "borrar filtro de fechas"
-#: src/paths/instance/orders/list/ListPage.tsx:184
+#: src/paths/instance/orders/list/ListPage.tsx:178
#, c-format
-msgid "date (YYYY/MM/DD)"
+msgid "Jump to date (%1$s)"
+msgstr "Saltar a la fecha (%1$s)"
+
+#: src/paths/instance/orders/list/index.tsx:113
+#, fuzzy, c-format
+msgid "Jump to order with the given product ID"
+msgstr "saltar al pedido con el ID de pedido proporcionado"
+
+#: src/paths/instance/orders/list/index.tsx:114
+#, fuzzy, c-format
+msgid "Order id"
+msgstr "ID de la orden"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
+#, fuzzy, c-format
+msgid "Invalid. Please insert only characters and numbers"
+msgstr "Invalido. Solo caracteres y numero"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
+#, fuzzy, c-format
+msgid "Just letters and numbers from 2 to 7"
+msgstr "sólo letras y números del 2 al 7"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
+#, fuzzy, c-format
+msgid "Size of the key must be 32"
+msgstr "el tamaño de la clave debe ser 32"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
+#, c-format
+msgid "Internal id on the system"
+msgstr "Id interno en el sistema"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
+#, c-format
+msgid "Useful to identify the device physically"
+msgstr "Util para identificar dispositivos fisicos"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
+#, c-format
+msgid "Verification algorithm"
+msgstr "Algoritmo de verificación"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
+#, c-format
+msgid "Algorithm to use to verify transaction in offline mode"
+msgstr "Algoritmo a utilizar para verificar la transacción en modo offline"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
+#, c-format
+msgid "Device key"
+msgstr "Clave del dispositivo"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
+#, c-format
+msgid "Be sure to be very hard to guess or use the random generator"
msgstr ""
+"Asegurese de que sea muy dificil de adivinar o use el generado aleatorio"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
+#, c-format
+msgid "Your device need to have exactly the same value"
+msgstr "Su dispositivo necesita tener exactamente el mismo valor"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
+#, fuzzy, c-format
+msgid "Generate random secret key"
+msgstr "generar clave secreta aleatoria"
-#: src/paths/instance/orders/list/index.tsx:103
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
#, fuzzy, c-format
-msgid "Enter an order id"
-msgstr "ir a id de orden"
+msgid "Random"
+msgstr "aleatorio"
-#: src/paths/instance/orders/list/index.tsx:111
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
#, c-format
-msgid "order not found"
-msgstr "Orden no encontrada"
+msgid ""
+"You can scan the next QR code with your device or save the key before "
+"continuing."
+msgstr ""
+"Puede escanear el siguiente codigo QR con su dispositivo o guardar la clave "
+"antes de continuar."
-#: src/paths/instance/orders/list/index.tsx:178
+#: src/paths/instance/otp_devices/create/index.tsx:60
#, fuzzy, c-format
-msgid "could not get the order to refund"
-msgstr "No se pudo create el reembolso"
+msgid "Device added successfully"
+msgstr "reembolzo creado satisfactoriamente"
-#: src/components/exception/AsyncButton.tsx:43
+#: src/paths/instance/otp_devices/create/index.tsx:66
#, fuzzy, c-format
-msgid "Loading..."
-msgstr "Cargando..."
+msgid "Could not add device"
+msgstr "no se pudo crear la reserva"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:57
+#, c-format
+msgid "OTP Devices"
+msgstr "Dispositivos OTP"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:62
+#, fuzzy, c-format
+msgid "Add new devices"
+msgstr "cargar nuevas transferencias"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:117
+#, fuzzy, c-format
+msgid "Load more devices before the first one"
+msgstr "cargar más plantillas antes de la primera"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:155
+#, fuzzy, c-format
+msgid "Delete selected devices from the database"
+msgstr "eliminar la reserva seleccionada de la base de datos"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:170
+#, fuzzy, c-format
+msgid "Load more devices after the last one"
+msgstr "cargar más plantillas después de la última"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, fuzzy, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr "Todavía no hay instancias, agregue más presionando el signo +"
+
+#: src/paths/instance/otp_devices/list/index.tsx:90
+#, fuzzy, c-format
+msgid "Device delete successfully"
+msgstr "producto fue eliminado correctamente"
+
+#: src/paths/instance/otp_devices/list/index.tsx:95
+#, fuzzy, c-format
+msgid "Could not delete the device"
+msgstr "no se pudo eliminar el producto"
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
+#, c-format
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
+#, fuzzy, c-format
+msgid "Not modified"
+msgstr "No transferido"
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
+#, c-format
+msgid "Change key"
+msgstr "Cambiar clave"
+
+#: src/paths/instance/otp_devices/update/index.tsx:119
+#, fuzzy, c-format
+msgid "Could not update template"
+msgstr "no se pudo actualizar el producto"
+
+#: src/paths/instance/otp_devices/update/index.tsx:121
+#, c-format
+msgid "Template id is unknown"
+msgstr "El id de la plantilla es desconocido"
+
+#: src/paths/instance/otp_devices/update/index.tsx:129
+#, c-format
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
+msgstr ""
+"La informacion provista es inconsistente con el estado actual de la plantilla"
#: src/components/form/InputStock.tsx:99
#, c-format
msgid ""
-"click here to configure the stock of the product, leave it as is and the "
-"backend will not control stock"
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
msgstr ""
-"pulse aquí para configurar el stock del producto, déjelo como está y el "
-"backend no controlará el stock"
+"Pulse aquí para configurar el stock del producto, déjelo como está y el "
+"backend no controlará el stock."
#: src/components/form/InputStock.tsx:109
#, c-format
@@ -1348,8 +2213,8 @@ msgid "Manage stock"
msgstr "Administrar stock"
#: src/components/form/InputStock.tsx:115
-#, c-format
-msgid "this product has been configured without stock control"
+#, fuzzy, c-format
+msgid "This product has been configured without stock control"
msgstr "este producto se ha configurado sin control de existencias"
#: src/components/form/InputStock.tsx:119
@@ -1359,701 +2224,1133 @@ msgstr "Inifinito"
#: src/components/form/InputStock.tsx:136
#, fuzzy, c-format
-msgid "lost cannot be greater than current and incoming (max %1$s)"
-msgstr "la pérdida no puede ser mayor al stock actual + entrante (max %1$s )"
+msgid "Lost can't be greater than current and incoming (max %1$s)"
+msgstr ""
+"la pérdida no puede ser mayor que la cantidad entrante actual (max %1$s )"
-#: src/components/form/InputStock.tsx:176
+#: src/components/form/InputStock.tsx:169
#, c-format
msgid "Incoming"
msgstr "Ingresando"
-#: src/components/form/InputStock.tsx:177
+#: src/components/form/InputStock.tsx:170
#, c-format
msgid "Lost"
msgstr "Perdido"
-#: src/components/form/InputStock.tsx:192
+#: src/components/form/InputStock.tsx:185
#, c-format
msgid "Current"
msgstr "Actual"
-#: src/components/form/InputStock.tsx:196
-#, c-format
-msgid "remove stock control for this product"
+#: src/components/form/InputStock.tsx:189
+#, fuzzy, c-format
+msgid "Remove stock control for this product"
msgstr "eliminar el control de existencias de este producto"
-#: src/components/form/InputStock.tsx:202
+#: src/components/form/InputStock.tsx:195
#, c-format
msgid "without stock"
msgstr "sin stock"
-#: src/components/form/InputStock.tsx:211
+#: src/components/form/InputStock.tsx:204
#, c-format
msgid "Next restock"
msgstr "Próximo reabastecimiento"
-#: src/components/form/InputStock.tsx:217
-#, c-format
-msgid "Delivery address"
-msgstr "Dirección de entrega"
+#: src/components/form/InputStock.tsx:208
+#, fuzzy, c-format
+msgid "Warehouse address"
+msgstr "Dirección de cuenta"
+
+#: src/components/form/InputArray.tsx:118
+#, fuzzy, c-format
+msgid "Add element to the list"
+msgstr "agregar elemento a la lista"
+
+#: src/components/product/ProductForm.tsx:120
+#, fuzzy, c-format
+msgid "Invalid amount"
+msgstr "Importe fijo"
-#: src/components/product/ProductForm.tsx:133
+#: src/components/product/ProductForm.tsx:191
#, c-format
-msgid "product identification to use in URLs (for internal use only)"
+msgid "Product identification to use in URLs (for internal use only)."
msgstr ""
-"Identificación del producto para usar en las URL (solo para uso interno)"
+"Identificación del producto para usar en las URL (solo para uso interno)."
-#: src/components/product/ProductForm.tsx:139
+#: src/components/product/ProductForm.tsx:197
#, c-format
-msgid "illustration of the product for customers"
-msgstr "ilustración del producto para los clientes"
+msgid "Illustration of the product for customers."
+msgstr "ilustración del producto para los clientes."
-#: src/components/product/ProductForm.tsx:145
+#: src/components/product/ProductForm.tsx:203
#, c-format
-msgid "product description for customers"
-msgstr "descripción del producto para los clientes"
+msgid "Product description for customers."
+msgstr "Descripción del producto para los clientes."
-#: src/components/product/ProductForm.tsx:149
+#: src/components/product/ProductForm.tsx:207
#, c-format
-msgid "Age restricted"
+msgid "Age restriction"
msgstr "Restricción de edad"
-#: src/components/product/ProductForm.tsx:150
-#, c-format
-msgid "is this product restricted for customer below certain age?"
+#: src/components/product/ProductForm.tsx:208
+#, fuzzy, c-format
+msgid "Is this product restricted for customer below certain age?"
msgstr "¿este producto está restringido para clientes menores de cierta edad?"
-#: src/components/product/ProductForm.tsx:155
+#: src/components/product/ProductForm.tsx:209
+#, fuzzy, c-format
+msgid "Minimum age of the customer"
+msgstr "Edad mínima requerida"
+
+#: src/components/product/ProductForm.tsx:213
+#, fuzzy, c-format
+msgid "Unit name"
+msgstr "Unidad"
+
+#: src/components/product/ProductForm.tsx:214
#, c-format
msgid ""
-"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
-"items, 5 meters) for customers"
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
msgstr ""
-"unidad que describe la cantidad de producto vendido (por ejemplo, 2 "
-"kilogramos, 5 litros, 3 artículos, 5 metros) para los clientes"
+"Unidad que describe la cantidad de producto vendido (por ejemplo, 2 "
+"kilogramos, 5 litros, 3 artículos, 5 metros) para los clientes."
-#: src/components/product/ProductForm.tsx:160
+#: src/components/product/ProductForm.tsx:215
+#, c-format
+msgid "Example: kg, items or liters"
+msgstr "Ejemplo: kg, item o litros"
+
+#: src/components/product/ProductForm.tsx:219
+#, c-format
+msgid "Price per unit"
+msgstr "Precio por unidad"
+
+#: src/components/product/ProductForm.tsx:220
#, c-format
msgid ""
-"sale price for customers, including taxes, for above units of the product"
+"Sale price for customers, including taxes, for above units of the product."
msgstr ""
-"precio de venta para los clientes, impuestos incluidos, por encima de las "
-"unidades del producto"
+"Precio de venta para los clientes, impuestos incluidos, por encima de las "
+"unidades del producto."
-#: src/components/product/ProductForm.tsx:164
+#: src/components/product/ProductForm.tsx:224
#, c-format
msgid "Stock"
msgstr "Existencias"
-#: src/components/product/ProductForm.tsx:166
+#: src/components/product/ProductForm.tsx:226
#, c-format
-msgid ""
-"product inventory for products with finite supply (for internal use only)"
+msgid "Inventory for products with finite supply (for internal use only)."
msgstr ""
-"inventario de productos para productos con suministro finito (sólo para uso "
-"interno)"
+"Inventario de productos para productos con suministro finito (sólo para uso "
+"interno)."
-#: src/components/product/ProductForm.tsx:171
+#: src/components/product/ProductForm.tsx:231
#, c-format
-msgid "taxes included in the product price, exposed to customers"
-msgstr "impuestos incluidos en el precio del producto, expuestos a los clientes"
+msgid "Taxes included in the product price, exposed to customers."
+msgstr ""
+"Impuestos incluidos en el precio del producto, expuestos a los clientes."
-#: src/paths/instance/products/create/CreatePage.tsx:66
+#: src/components/product/ProductForm.tsx:235
#, c-format
-msgid "Need to complete marked fields"
-msgstr "Necesita completar los campos marcados"
+msgid "Categories"
+msgstr "Categorias"
-#: src/paths/instance/products/create/index.tsx:51
+#: src/components/product/ProductForm.tsx:241
+#, fuzzy, c-format
+msgid "Search by category description or id"
+msgstr "buscar productos por su descripción o ID"
+
+#: src/components/product/ProductForm.tsx:242
#, c-format
-msgid "could not create product"
-msgstr "no se pudo crear el producto"
+msgid "Categories where this product will be listed on."
+msgstr "Dirección a donde los productos serán entregados."
-#: src/paths/instance/products/list/Table.tsx:68
+#: src/paths/instance/products/create/index.tsx:52
#, c-format
-msgid "Products"
-msgstr "Productos"
+msgid "Product created successfully"
+msgstr "Producto creado con éxito"
-#: src/paths/instance/products/list/Table.tsx:73
+#: src/paths/instance/products/create/index.tsx:58
#, c-format
-msgid "add product to inventory"
-msgstr "añadir producto al inventario"
+msgid "Could not create product"
+msgstr "No se pudo crear el producto"
-#: src/paths/instance/products/list/Table.tsx:137
+#: src/paths/instance/products/list/Table.tsx:76
#, c-format
-msgid "Sell"
-msgstr "Venta"
+msgid "Inventory"
+msgstr "Inventario"
-#: src/paths/instance/products/list/Table.tsx:143
+#: src/paths/instance/products/list/Table.tsx:81
#, c-format
-msgid "Profit"
-msgstr "Ganancia"
+msgid "Add product to inventory"
+msgstr "Añadir producto al inventario"
-#: src/paths/instance/products/list/Table.tsx:149
+#: src/paths/instance/products/list/Table.tsx:163
+#, c-format
+msgid "Sales"
+msgstr "Ventas"
+
+#: src/paths/instance/products/list/Table.tsx:169
#, c-format
msgid "Sold"
msgstr "Vendido"
-#: src/paths/instance/products/list/Table.tsx:210
+#: src/paths/instance/products/list/Table.tsx:235
#, c-format
-msgid "free"
-msgstr "Gratis"
+msgid "Free"
+msgstr "Gratuito"
-#: src/paths/instance/products/list/Table.tsx:248
+#: src/paths/instance/products/list/Table.tsx:275
#, fuzzy, c-format
-msgid "go to product update page"
-msgstr "producto actualizado correctamente"
+msgid "Go to product update page"
+msgstr "ir a la página de actualización del producto"
-#: src/paths/instance/products/list/Table.tsx:255
+#: src/paths/instance/products/list/Table.tsx:282
#, c-format
msgid "Update"
msgstr "Actualizar"
-#: src/paths/instance/products/list/Table.tsx:260
-#, c-format
-msgid "remove this product from the database"
+#: src/paths/instance/products/list/Table.tsx:287
+#, fuzzy, c-format
+msgid "Remove this product from the database"
msgstr "eliminar este producto de la base de datos"
-#: src/paths/instance/products/list/Table.tsx:331
-#, c-format
-msgid "update the product with new price"
+#: src/paths/instance/products/list/Table.tsx:323
+#, fuzzy, c-format
+msgid "Load more products after the last one"
+msgstr "cargar más plantillas después de la última"
+
+#: src/paths/instance/products/list/Table.tsx:365
+#, fuzzy, c-format
+msgid "Update the product with new price"
msgstr "actualizar el producto con el nuevo precio"
-#: src/paths/instance/products/list/Table.tsx:341
-#, c-format
-msgid "update product with new price"
+#: src/paths/instance/products/list/Table.tsx:376
+#, fuzzy, c-format
+msgid "Update product with new price"
msgstr "actualizar producto con nuevo precio"
-#: src/paths/instance/products/list/Table.tsx:399
-#, c-format
-msgid "add more elements to the inventory"
+#: src/paths/instance/products/list/Table.tsx:387
+#, fuzzy, c-format
+msgid "Confirm update"
+msgstr "Confirmado"
+
+#: src/paths/instance/products/list/Table.tsx:435
+#, fuzzy, c-format
+msgid "Add more elements to the inventory"
msgstr "añadir más elementos al inventario"
-#: src/paths/instance/products/list/Table.tsx:404
-#, c-format
-msgid "report elements lost in the inventory"
+#: src/paths/instance/products/list/Table.tsx:440
+#, fuzzy, c-format
+msgid "Report elements lost in the inventory"
msgstr "informar de elementos perdidos en el inventario"
-#: src/paths/instance/products/list/Table.tsx:409
+#: src/paths/instance/products/list/Table.tsx:445
#, fuzzy, c-format
-msgid "new price for the product"
-msgstr "no se pudo actualizar el producto"
+msgid "New price for the product"
+msgstr "nuevo precio para el producto"
-#: src/paths/instance/products/list/Table.tsx:421
-#, c-format
-msgid "the are value with errors"
-msgstr ""
+#: src/paths/instance/products/list/Table.tsx:457
+#, fuzzy, c-format
+msgid "The are value with errors"
+msgstr "hay valores con errores"
-#: src/paths/instance/products/list/Table.tsx:422
-#, c-format
-msgid "update product with new stock and price"
-msgstr ""
+#: src/paths/instance/products/list/Table.tsx:458
+#, fuzzy, c-format
+msgid "Update product with new stock and price"
+msgstr "actualizar el producto con nuevas existencias y precio"
-#: src/paths/instance/products/list/Table.tsx:463
+#: src/paths/instance/products/list/Table.tsx:499
#, fuzzy, c-format
-msgid "There is no products yet, add more pressing the + sign"
-msgstr "No hay propinas todavía, agregar mas presionando el signo +"
+msgid "There are no products yet, add more pressing the + sign"
+msgstr "No existen productos todavía, añadir más pulsando el símbolo +"
#: src/paths/instance/products/list/index.tsx:86
+#, fuzzy, c-format
+msgid "Jump to product with the given product ID"
+msgstr "saltar al pedido con el ID de pedido proporcionado"
+
+#: src/paths/instance/products/list/index.tsx:87
#, c-format
-msgid "product updated successfully"
+msgid "Product id"
+msgstr "Id de producto"
+
+#: src/paths/instance/products/list/index.tsx:104
+#, fuzzy, c-format
+msgid "Product updated successfully"
msgstr "producto actualizado correctamente"
-#: src/paths/instance/products/list/index.tsx:92
-#, c-format
-msgid "could not update the product"
+#: src/paths/instance/products/list/index.tsx:109
+#, fuzzy, c-format
+msgid "Could not update the product"
msgstr "no se pudo actualizar el producto"
-#: src/paths/instance/products/list/index.tsx:103
+#: src/paths/instance/products/list/index.tsx:144
+#, fuzzy, c-format
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
+msgstr "La instancia '%1$s' (ID: %2$s) fue eliminada"
+
+#: src/paths/instance/products/list/index.tsx:149
+#, fuzzy, c-format
+msgid "Could not delete the product"
+msgstr "no se pudo eliminar el producto"
+
+#: src/paths/instance/products/list/index.tsx:165
#, c-format
-msgid "product delete successfully"
-msgstr "producto fue eliminado correctamente"
+msgid ""
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
+msgstr ""
+"Si elimina el producto con nombre %1$s (ID: %2$s ), el stock y la "
+"informacion relacionada se perdera"
-#: src/paths/instance/products/list/index.tsx:109
+#: src/paths/instance/products/list/index.tsx:173
#, c-format
-msgid "could not delete the product"
-msgstr "no se pudo eliminar el producto"
+msgid "Deleting an product can't be undone."
+msgstr "El borrado de un producto no se puede restaurar."
#: src/paths/instance/products/update/UpdatePage.tsx:56
-#, fuzzy, c-format
+#, c-format
msgid "Product id:"
-msgstr "Id de producto"
+msgstr "ID de producto:"
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:95
+#: src/paths/instance/products/update/index.tsx:85
#, c-format
-msgid ""
-"To complete the setup of the reserve, you must now initiate a wire transfer "
-"using the given wire transfer subject and crediting the specified amount to "
-"the indicated account of the exchange."
-msgstr ""
+msgid "Product (ID: %1$s) has been updated"
+msgstr "El producto (ID: %1$s) se ha actualizado"
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:102
+#: src/paths/instance/products/update/index.tsx:91
#, c-format
-msgid "If your system supports RFC 8905, you can do this by opening this URI:"
-msgstr ""
+msgid "Could not update product"
+msgstr "No se pudo actualizar el producto"
-#: src/paths/instance/reserves/create/CreatePage.tsx:83
+#: src/paths/instance/templates/create/CreatePage.tsx:112
#, fuzzy, c-format
-msgid "it should be greater than 0"
-msgstr "Debe ser mayor a 0"
+msgid "Must be greater that 0"
+msgstr "debe ser mayor que 0"
-#: src/paths/instance/reserves/create/CreatePage.tsx:88
+#: src/paths/instance/templates/create/CreatePage.tsx:119
+#, fuzzy, c-format
+msgid "Too short"
+msgstr "demasiado corta"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:192
#, c-format
-msgid "must be a valid URL"
-msgstr ""
+msgid "Identifier"
+msgstr "Identificador"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:193
+#, c-format
+msgid "Name of the template in URLs."
+msgstr "Nombre de la plantilla en las URL."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:199
+#, c-format
+msgid "Describe what this template stands for"
+msgstr "Describa lo que representa esta plantilla"
-#: src/paths/instance/reserves/create/CreatePage.tsx:107
+#: src/paths/instance/templates/create/CreatePage.tsx:206
#, fuzzy, c-format
-msgid "Initial balance"
-msgstr "Instancia"
+msgid "If specified, this template will create an order with the same summary"
+msgstr "Si se especifica, esta plantilla creará pedidos con el mismo resumen"
-#: src/paths/instance/reserves/create/CreatePage.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:210
#, c-format
-msgid "balance prior to deposit"
-msgstr ""
+msgid "Summary is editable"
+msgstr "El detalle es editable"
-#: src/paths/instance/reserves/create/CreatePage.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:211
#, c-format
-msgid "Exchange URL"
-msgstr "URL del Exchange"
+msgid "Allow the user to change the summary."
+msgstr "Permitir el usuario cambiar el detalle."
-#: src/paths/instance/reserves/create/CreatePage.tsx:113
+#: src/paths/instance/templates/create/CreatePage.tsx:217
+#, fuzzy, c-format
+msgid "If specified, this template will create an order with the same price"
+msgstr "Si se especifica, esta plantilla creará pedidos con el mismo precio"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:221
+#, fuzzy, c-format
+msgid "Amount is editable"
+msgstr "Monto abonado"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:222
#, c-format
-msgid "URL of exchange"
-msgstr ""
+msgid "Allow the user to select the amount to pay."
+msgstr "Permitir al usuario seleccionar el monto a pagar."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:229
+#, c-format
+msgid "Currency is editable"
+msgstr "La moneda es editable"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:230
+#, c-format
+msgid "Allow the user to change currency."
+msgstr "Permitir al usuario cambiar la moneda."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:232
+#, c-format
+msgid "Supported currencies"
+msgstr "Monedas soportadas"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:233
+#, c-format
+msgid "Supported currencies: %1$s"
+msgstr "Monedas soportadas: %1$s"
-#: src/paths/instance/reserves/create/CreatePage.tsx:148
+#: src/paths/instance/templates/create/CreatePage.tsx:241
#, c-format
-msgid "Next"
-msgstr "Siguiente"
+msgid "Minimum age"
+msgstr "Edad mínima"
-#: src/paths/instance/reserves/create/CreatePage.tsx:186
+#: src/paths/instance/templates/create/CreatePage.tsx:243
#, c-format
-msgid "Wire method"
+msgid "Is this contract restricted to some age?"
+msgstr "¿Este contrato está restringido a alguna edad?"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:247
+#, fuzzy, c-format
+msgid "Payment timeout"
+msgstr "Opciones de pago"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:249
+#, fuzzy, c-format
+msgid ""
+"How much time the customer has to complete the payment once the order was "
+"created."
msgstr ""
+"Cuánto tiempo tiene el cliente para completar el pago una vez creado el "
+"pedido."
-#: src/paths/instance/reserves/create/CreatePage.tsx:187
+#: src/paths/instance/templates/create/CreatePage.tsx:254
+#, c-format
+msgid "OTP device"
+msgstr "Dispositivo OTP"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:255
+#, c-format
+msgid "Use to verify transaction while offline."
+msgstr "Algoritmo a utilizar para verificar la transacción en modo offline."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:257
+#, c-format
+msgid "No OTP device."
+msgstr "Sin dispositivo OTP."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:259
+#, c-format
+msgid "Add one first"
+msgstr "Agregar uno primero"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:272
+#, c-format
+msgid "No device"
+msgstr "Sin dispotivo"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:276
+#, c-format
+msgid "Use to verify transaction in offline mode."
+msgstr "Algoritmo a utilizar para verificar la transacción en modo offline."
+
+#: src/paths/instance/templates/create/index.tsx:52
+#, c-format
+msgid "Template has been created"
+msgstr "La plantilla fue creada"
+
+#: src/paths/instance/templates/create/index.tsx:58
#, fuzzy, c-format
-msgid "method to use for wire transfer"
-msgstr "no se pudo informar la transferencia"
+msgid "Could not create template"
+msgstr "no se pudo actualizar el producto"
-#: src/paths/instance/reserves/create/CreatePage.tsx:189
+#: src/paths/instance/templates/list/Table.tsx:61
#, c-format
-msgid "Select one wire method"
-msgstr ""
+msgid "Templates"
+msgstr "Plantillas"
+
+#: src/paths/instance/templates/list/Table.tsx:66
+#, fuzzy, c-format
+msgid "Add new templates"
+msgstr "añadir nuevas plantillas"
+
+#: src/paths/instance/templates/list/Table.tsx:127
+#, fuzzy, c-format
+msgid "Load more templates before the first one"
+msgstr "cargar más plantillas antes de la primera"
+
+#: src/paths/instance/templates/list/Table.tsx:165
+#, fuzzy, c-format
+msgid "Delete selected templates from the database"
+msgstr "eliminar las plantillas seleccionadas de la base de datos"
-#: src/paths/instance/reserves/create/index.tsx:62
+#: src/paths/instance/templates/list/Table.tsx:172
#, fuzzy, c-format
-msgid "could not create reserve"
+msgid "Use template to create new order"
+msgstr "utilizar la plantilla para crear un nuevo pedido"
+
+#: src/paths/instance/templates/list/Table.tsx:175
+#, fuzzy, c-format
+msgid "Use template"
+msgstr "añadir nuevas plantillas"
+
+#: src/paths/instance/templates/list/Table.tsx:179
+#, fuzzy, c-format
+msgid "Create qr code for the template"
msgstr "No se pudo create el reembolso"
-#: src/paths/instance/reserves/details/DetailPage.tsx:77
+#: src/paths/instance/templates/list/Table.tsx:194
+#, fuzzy, c-format
+msgid "Load more templates after the last one"
+msgstr "cargar más plantillas después de la última"
+
+#: src/paths/instance/templates/list/Table.tsx:214
+#, fuzzy, c-format
+msgid "There are no templates yet, add more pressing the + sign"
+msgstr "No hay propinas todavía, agregar mas presionando el signo +"
+
+#: src/paths/instance/templates/list/index.tsx:91
+#, fuzzy, c-format
+msgid "Jump to template with the given template ID"
+msgstr "saltar al pedido con el ID de pedido proporcionado"
+
+#: src/paths/instance/templates/list/index.tsx:92
#, c-format
-msgid "Valid until"
-msgstr "Válido hasta"
+msgid "Template identification"
+msgstr "Identificacion de plantilla"
+
+#: src/paths/instance/templates/list/index.tsx:132
+#, fuzzy, c-format
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
+msgstr "La instancia '%1$s' (ID: %2$s) fue eliminada"
+
+#: src/paths/instance/templates/list/index.tsx:137
+#, fuzzy, c-format
+msgid "Failed to delete template"
+msgstr "Fallo al eliminar instancia"
+
+#: src/paths/instance/templates/list/index.tsx:153
+#, c-format
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
+msgstr "Si elimina la plantilla %1$s (ID: %2$s) perdera informacion"
-#: src/paths/instance/reserves/details/DetailPage.tsx:82
+#: src/paths/instance/templates/list/index.tsx:160
#, fuzzy, c-format
-msgid "Created balance"
-msgstr "creado"
+msgid "Deleting an template"
+msgstr "cargar nuevas transferencias"
-#: src/paths/instance/reserves/details/DetailPage.tsx:99
+#: src/paths/instance/templates/list/index.tsx:162
#, fuzzy, c-format
-msgid "Exchange balance"
-msgstr "Monto inicial"
+msgid "can't be undone"
+msgstr "no puede ser vacío"
-#: src/paths/instance/reserves/details/DetailPage.tsx:104
+#: src/paths/instance/templates/qr/QrPage.tsx:77
#, c-format
-msgid "Picked up"
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
+#, c-format
+msgid "If specified, this template will create order with the same summary"
+msgstr "Si se especifica, esta plantilla creará pedidos con el mismo resumen"
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
+#, fuzzy, c-format
+msgid "If specified, this template will create orders with the same price"
+msgstr "Si se especifica, esta plantilla creará pedidos con el mismo precio"
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
+#, c-format
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
msgstr ""
+"Cuánto tiempo tiene el cliente para completar el pago una vez creado el "
+"pedido."
-#: src/paths/instance/reserves/details/DetailPage.tsx:109
+#: src/paths/instance/templates/update/index.tsx:90
+#, c-format
+msgid "Template (ID: %1$s) has been updated"
+msgstr "Se ha actualizado la plantilla (ID: %1$s)"
+
+#: src/paths/instance/templates/use/UsePage.tsx:58
+#, fuzzy, c-format
+msgid "An amount is required"
+msgstr "Se requiere una cantidad"
+
+#: src/paths/instance/templates/use/UsePage.tsx:60
+#, fuzzy, c-format
+msgid "An order summary is required"
+msgstr "Se requiere resumen del pedido"
+
+#: src/paths/instance/templates/use/UsePage.tsx:88
#, fuzzy, c-format
-msgid "Committed"
-msgstr "Monto confirmado"
+msgid "New order from template"
+msgstr "cargar viejas transferencias"
-#: src/paths/instance/reserves/details/DetailPage.tsx:116
+#: src/paths/instance/templates/use/UsePage.tsx:110
#, c-format
-msgid "Account address"
-msgstr "Dirección de cuenta"
+msgid "Amount of the order"
+msgstr "Importe del pedido"
-#: src/paths/instance/reserves/details/DetailPage.tsx:119
+#: src/paths/instance/templates/use/UsePage.tsx:115
+#, fuzzy, c-format
+msgid "Order summary"
+msgstr "Estado de orden"
+
+#: src/paths/instance/templates/use/index.tsx:125
+#, fuzzy, c-format
+msgid "Could not create order from template"
+msgstr "No se pudo create el reembolso"
+
+#: src/paths/instance/token/DetailPage.tsx:57
+#, fuzzy, c-format
+msgid "You need your access token to perform the operation"
+msgstr "Está estableciendo el token de acceso para la nueva instancia"
+
+#: src/paths/instance/token/DetailPage.tsx:74
+#, fuzzy, c-format
+msgid "You are updating the access token from instance with id \"%1$s\""
+msgstr "Está actualizando el token de acceso para la instancia con id %1$s"
+
+#: src/paths/instance/token/DetailPage.tsx:105
#, c-format
-msgid "Subject"
-msgstr "Asunto"
+msgid "This instance doesn't have authentication token."
+msgstr "Esta instancia no tiene token de autenticacion."
-#: src/paths/instance/reserves/details/DetailPage.tsx:130
+#: src/paths/instance/token/DetailPage.tsx:106
#, c-format
-msgid "Tips"
-msgstr "Propinas"
+msgid "You can leave it empty if there is another layer of security."
+msgstr "Puede dejar esto vacio si es que hay una ca"
+
+#: src/paths/instance/token/DetailPage.tsx:121
+#, fuzzy, c-format
+msgid "Current access token"
+msgstr "Establecer token de acceso"
-#: src/paths/instance/reserves/details/DetailPage.tsx:193
+#: src/paths/instance/token/DetailPage.tsx:126
#, c-format
-msgid "No tips has been authorized from this reserve"
-msgstr ""
+msgid "Clearing the access token will mean public access to the instance."
+msgstr "Limpiar el token de acceso significa acceso público a la instancia."
-#: src/paths/instance/reserves/details/DetailPage.tsx:213
+#: src/paths/instance/token/DetailPage.tsx:142
#, fuzzy, c-format
-msgid "Authorized"
-msgstr "Token de autorización"
+msgid "Clear token"
+msgstr "Borrar token"
-#: src/paths/instance/reserves/details/DetailPage.tsx:222
+#: src/paths/instance/token/DetailPage.tsx:177
#, fuzzy, c-format
-msgid "Expiration"
-msgstr "Información extra"
+msgid "Confirm change"
+msgstr "Confirmar modificación"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:108
+#: src/paths/instance/token/index.tsx:83
#, fuzzy, c-format
-msgid "amount of tip"
-msgstr "monto"
+msgid "Failed to clear token"
+msgstr "Fallo al borrar el token"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:112
+#: src/paths/instance/token/index.tsx:109
#, fuzzy, c-format
-msgid "Justification"
-msgstr "Jurisdicción"
+msgid "Failed to set new token"
+msgstr "No se ha podido establecer el nuevo token"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
+#, c-format
+msgid "Slug"
+msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:114
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
+#, fuzzy, c-format
+msgid "Token family slug to use in URLs (for internal use only)"
+msgstr ""
+"Identificación del producto para usar en las URL (solo para uso interno)"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
#, c-format
-msgid "reason for the tip"
+msgid "Kind"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:118
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
#, c-format
-msgid "URL after tip"
+msgid "Token family kind"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:119
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
#, c-format
-msgid "URL to visit after tip payment"
+msgid "User-readable token family name"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:65
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
+#, fuzzy, c-format
+msgid "Token family description for customers"
+msgstr "descripción del producto para los clientes"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
#, fuzzy, c-format
-msgid "Reserves not yet funded"
-msgstr "Servidor no encontrado"
+msgid "Valid After"
+msgstr "Válido hasta"
-#: src/paths/instance/reserves/list/Table.tsx:89
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
#, c-format
-msgid "Reserves ready"
+msgid "Token family can issue tokens after this date"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:95
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
#, fuzzy, c-format
-msgid "add new reserve"
-msgstr "cargar nuevas transferencias"
+msgid "Valid Before"
+msgstr "formato inválido"
-#: src/paths/instance/reserves/list/Table.tsx:143
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
#, c-format
-msgid "Expires at"
+msgid "Token family can issue tokens until this date"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:146
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
+#, fuzzy, c-format
+msgid "Duration"
+msgstr "Expiración"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
#, c-format
-msgid "Initial"
+msgid "Validity duration of a issued token"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:202
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
+#, fuzzy, c-format
+msgid "Token familty created successfully"
+msgstr "reembolzo creado satisfactoriamente"
+
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
+#, fuzzy, c-format
+msgid "Could not create token family"
+msgstr "No se pudo create el reembolso"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
#, c-format
-msgid "delete selected reserve from the database"
+msgid "Token Families"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:210
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
#, c-format
-msgid "authorize new tip from selected reserve"
-msgstr "autorizar nueva punta de reserva seleccionada"
+msgid "Add token family"
+msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:237
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
+#, fuzzy, c-format
+msgid "Go to token family update page"
+msgstr "ir a la página de actualización del producto"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
+#, fuzzy, c-format
+msgid "Remove this token family from the database"
+msgstr "eliminar este producto de la base de datos"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
#, fuzzy, c-format
msgid ""
-"There is no ready reserves yet, add more pressing the + sign or fund them"
-msgstr "No hay transferencias todavía, agregar mas presionando el signo +"
+"There are no token families yet, add the first one by pressing the + sign."
+msgstr "No hay propinas todavía, agregar mas presionando el signo +."
-#: src/paths/instance/reserves/list/Table.tsx:264
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
#, fuzzy, c-format
-msgid "Expected Balance"
-msgstr "Ejecutado en"
+msgid "Token family updated successfully"
+msgstr "Familia de tokens actualizada correctamente"
-#: src/paths/instance/reserves/list/index.tsx:110
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
#, fuzzy, c-format
-msgid "could not create the tip"
-msgstr "No se pudo create el reembolso"
+msgid "Could not update the token family"
+msgstr "No se ha podido actualizar la familia de tokens"
-#: src/paths/instance/templates/create/CreatePage.tsx:77
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
#, fuzzy, c-format
-msgid "should not be empty"
-msgstr "no puede ser vacío"
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
+msgstr "Se ha eliminado la familia de tokens \"%1$s\" (SLUG: %2$s)"
-#: src/paths/instance/templates/create/CreatePage.tsx:93
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
#, fuzzy, c-format
-msgid "should be greater that 0"
-msgstr "Debe ser mayor a 0"
+msgid "Failed to delete token family"
+msgstr "No se ha podido eliminar la familia de tokens"
-#: src/paths/instance/templates/create/CreatePage.tsx:96
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
#, fuzzy, c-format
-msgid "can't be empty"
-msgstr "no puede ser vacío"
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
+msgstr ""
+"Si elimina la familia de tokens %1$s (Slug: %2$s), todos los tokens emitidos "
+"no serán válidos."
-#: src/paths/instance/templates/create/CreatePage.tsx:100
-#, c-format
-msgid "to short"
-msgstr "demasiado corta"
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
+#, fuzzy, c-format
+msgid "Deleting a token family %1$s ."
+msgstr "Eliminando una familia de tokens %1$s ."
-#: src/paths/instance/templates/create/CreatePage.tsx:108
-#, c-format
-msgid "just letters and numbers from 2 to 7"
-msgstr "sólo letras y números del 2 al 7"
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
+#, fuzzy, c-format
+msgid "Token Family: %1$s"
+msgstr "Familia de tokens: %1$s"
+
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
+#, fuzzy, c-format
+msgid "Could not update token family"
+msgstr "No se ha podido actualizar la familia de tokens"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
+#, fuzzy, c-format
+msgid "Check the id, does not look valid"
+msgstr "comprueba el ID, parece no ser válido"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
+#, fuzzy, c-format
+msgid "Must have 52 characters, current %1$s"
+msgstr "debería tener 52 caracteres, actualmente %1$s"
-#: src/paths/instance/templates/create/CreatePage.tsx:110
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
#, c-format
-msgid "size of the key should be 32"
-msgstr "el tamaño de la clave debe ser 32"
+msgid "URL doesn't have the right format"
+msgstr "La URL no tiene el formato correcto"
-#: src/paths/instance/templates/create/CreatePage.tsx:137
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
#, c-format
-msgid "Identifier"
-msgstr "Identificador"
+msgid "Credited bank account"
+msgstr "Abono en cuenta bancaria"
-#: src/paths/instance/templates/create/CreatePage.tsx:138
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
+#, fuzzy, c-format
+msgid "Select an account"
+msgstr "Selecciona una cuenta"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
#, c-format
-msgid "Name of the template in URLs."
-msgstr "Nombre de la plantilla en las URL."
+msgid "Bank account of the merchant where the payment was received"
+msgstr "Cuenta bancaria del comerciante donde se recibió el pago"
-#: src/paths/instance/templates/create/CreatePage.tsx:144
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
#, c-format
-msgid "Describe what this template stands for"
-msgstr "Describa lo que representa esta plantilla"
+msgid "Wire transfer ID"
+msgstr "ID de la transferencia"
-#: src/paths/instance/templates/create/CreatePage.tsx:149
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
#, fuzzy, c-format
-msgid "Fixed summary"
-msgstr "Estado de orden"
+msgid ""
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
+"characters long"
+msgstr ""
+"identificador único de la transferencia utilizado por el proveedor, debe "
+"tener 52 caracteres"
-#: src/paths/instance/templates/create/CreatePage.tsx:150
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
#, c-format
-msgid "If specified, this template will create order with the same summary"
-msgstr "Si se especifica, esta plantilla creará pedidos con el mismo resumen"
+msgid "Exchange URL"
+msgstr "URL del proveedor"
-#: src/paths/instance/templates/create/CreatePage.tsx:154
-#, fuzzy, c-format
-msgid "Fixed price"
-msgstr "precio unitario"
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
+#, c-format
+msgid ""
+"Base URL of the exchange that made the transfer, should have been in the "
+"wire transfer subject"
+msgstr ""
+"URL base del proveedor que realizó la transferencia, debería haber estado en "
+"el asunto de la transferencia bancaria"
-#: src/paths/instance/templates/create/CreatePage.tsx:155
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
#, c-format
-msgid "If specified, this template will create order with the same price"
-msgstr "Si se especifica, esta plantilla creará pedidos con el mismo precio"
+msgid "Amount credited"
+msgstr "Monto abonado"
-#: src/paths/instance/templates/create/CreatePage.tsx:159
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
#, c-format
-msgid "Minimum age"
-msgstr "Edad mínima"
+msgid "Actual amount that was wired to the merchant's bank account"
+msgstr "Monto real que se transfirió a la cuenta bancaria del comerciante"
+
+#: src/paths/instance/transfers/create/index.tsx:62
+#, fuzzy, c-format
+msgid "Wire transfer informed successfully"
+msgstr "reembolzo creado satisfactoriamente"
-#: src/paths/instance/templates/create/CreatePage.tsx:161
+#: src/paths/instance/transfers/create/index.tsx:68
+#, fuzzy, c-format
+msgid "Could not inform transfer"
+msgstr "no se pudo informar la transferencia"
+
+#: src/paths/instance/transfers/list/Table.tsx:62
#, c-format
-msgid "Is this contract restricted to some age?"
-msgstr "¿Este contrato está restringido a alguna edad?"
+msgid "Transfers"
+msgstr "Transferencias"
-#: src/paths/instance/templates/create/CreatePage.tsx:165
+#: src/paths/instance/transfers/list/Table.tsx:67
#, fuzzy, c-format
-msgid "Payment timeout"
-msgstr "Opciones de pago"
+msgid "Add new transfer"
+msgstr "añadir nueva transferencia"
-#: src/paths/instance/templates/create/CreatePage.tsx:167
+#: src/paths/instance/transfers/list/Table.tsx:120
+#, fuzzy, c-format
+msgid "Load more transfers before the first one"
+msgstr "cargar más transferencias antes de la primera"
+
+#: src/paths/instance/transfers/list/Table.tsx:133
#, c-format
-msgid ""
-"How much time has the customer to complete the payment once the order was "
-"created."
-msgstr ""
-"Cuánto tiempo tiene el cliente para completar el pago una vez creado el "
-"pedido."
+msgid "Credit"
+msgstr "Crédito"
-#: src/paths/instance/templates/create/CreatePage.tsx:171
+#: src/paths/instance/transfers/list/Table.tsx:136
#, c-format
-msgid "Verification algorithm"
-msgstr "Algoritmo de verificación"
+msgid "Confirmed"
+msgstr "Confirmado"
-#: src/paths/instance/templates/create/CreatePage.tsx:172
+#: src/paths/instance/transfers/list/Table.tsx:139
#, c-format
-msgid "Algorithm to use to verify transaction in offline mode"
-msgstr "Algoritmo a utilizar para verificar la transacción en modo offline"
+msgid "Verified"
+msgstr "Verificado"
+
+#: src/paths/instance/transfers/list/Table.tsx:142
+#, fuzzy, c-format
+msgid "Executed on"
+msgstr "Ejecutado en"
-#: src/paths/instance/templates/create/CreatePage.tsx:180
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "Point-of-sale key"
-msgstr "Clave punto de venta"
+msgid "yes"
+msgstr "si"
-#: src/paths/instance/templates/create/CreatePage.tsx:182
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "Useful to validate the purchase"
-msgstr "Útil para validar la compra"
+msgid "no"
+msgstr "no"
-#: src/paths/instance/templates/create/CreatePage.tsx:196
+#: src/paths/instance/transfers/list/Table.tsx:158
#, c-format
-msgid "generate random secret key"
-msgstr "generar clave secreta aleatoria"
+msgid "never"
+msgstr "nunca"
-#: src/paths/instance/templates/create/CreatePage.tsx:203
+#: src/paths/instance/transfers/list/Table.tsx:163
#, c-format
-msgid "random"
-msgstr "aleatorio"
+msgid "unknown"
+msgstr "desconocido"
-#: src/paths/instance/templates/create/CreatePage.tsx:208
+#: src/paths/instance/transfers/list/Table.tsx:169
+#, fuzzy, c-format
+msgid "Delete selected transfer from the database"
+msgstr "eliminar transferencia seleccionada de la base de datos"
+
+#: src/paths/instance/transfers/list/Table.tsx:184
+#, fuzzy, c-format
+msgid "Load more transfers after the last one"
+msgstr "cargue más transferencia luego de la última"
+
+#: src/paths/instance/transfers/list/Table.tsx:204
+#, fuzzy, c-format
+msgid "There are no transfers yet, add more pressing the + sign"
+msgstr "No hay transferencias todavía, agregar mas presionando el signo +"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:83
+#, fuzzy, c-format
+msgid "All accounts"
+msgstr "Cuenta"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:84
+#, fuzzy, c-format
+msgid "Filter by account address"
+msgstr "filtrar por dirección de cuenta"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:105
+#, fuzzy, c-format
+msgid "Only show wire transfers confirmed by the merchant"
+msgstr "mostrar sólo las transferencias confirmadas por el comerciante"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:115
+#, fuzzy, c-format
+msgid "Only show wire transfers claimed by the exchange"
+msgstr "sólo muestran las transferencias reclamadas por el proveedor"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:118
#, c-format
-msgid "show secret key"
-msgstr "mostrar clave secreta"
+msgid "Unverified"
+msgstr "Sin verificar"
-#: src/paths/instance/templates/create/CreatePage.tsx:209
+#: src/paths/instance/transfers/list/index.tsx:118
#, c-format
-msgid "hide secret key"
-msgstr "ocultar clave secreta"
+msgid "Wire transfer \"%1$s...\" has been deleted"
+msgstr "Se ha eliminado la transferencia bancaria \"%1$s...\""
+
+#: src/paths/instance/transfers/list/index.tsx:123
+#, fuzzy, c-format
+msgid "Failed to delete transfer"
+msgstr "Error al eliminar la transferencia"
-#: src/paths/instance/templates/create/CreatePage.tsx:216
+#: src/paths/admin/create/CreatePage.tsx:86
#, c-format
-msgid "hide"
-msgstr "ocultar"
+msgid "Must be business or individual"
+msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:218
+#: src/paths/admin/create/CreatePage.tsx:104
#, c-format
-msgid "show"
-msgstr "mostrar"
+msgid "Pay delay can't be greater than wire transfer delay"
+msgstr ""
-#: src/paths/instance/templates/create/index.tsx:52
+#: src/paths/admin/create/CreatePage.tsx:112
#, fuzzy, c-format
-msgid "could not inform template"
-msgstr "no se pudo informar la transferencia"
+msgid "Max 7 lines"
+msgstr "máximo 7 líneas"
-#: src/paths/instance/templates/use/UsePage.tsx:54
+#: src/paths/admin/create/CreatePage.tsx:138
+#, c-format
+msgid "Doesn't match"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:215
#, fuzzy, c-format
-msgid "Amount is required"
-msgstr "Login necesario"
+msgid "Enable access control"
+msgstr "Administrar token de acceso"
-#: src/paths/instance/templates/use/UsePage.tsx:58
+#: src/paths/admin/create/CreatePage.tsx:216
#, c-format
-msgid "Order summary is required"
-msgstr "Se requiere resumen del pedido"
+msgid "Choose if the backend server should authenticate access."
+msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:86
-#, fuzzy, c-format
-msgid "New order for template"
-msgstr "cargar viejas transferencias"
+#: src/paths/admin/create/CreatePage.tsx:243
+#, c-format
+msgid "Access control is not yet decided. This instance can't be created."
+msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:108
+#: src/paths/admin/create/CreatePage.tsx:250
#, c-format
-msgid "Amount of the order"
-msgstr "Importe del pedido"
+msgid "Authorization must be handled externally."
+msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:113
-#, fuzzy, c-format
-msgid "Order summary"
-msgstr "Estado de orden"
+#: src/paths/admin/create/CreatePage.tsx:256
+#, c-format
+msgid "Authorization is handled by the backend server."
+msgstr ""
-#: src/paths/instance/templates/use/index.tsx:92
-#, fuzzy, c-format
-msgid "could not create order from template"
-msgstr "No se pudo create el reembolso"
+#: src/paths/admin/create/CreatePage.tsx:274
+#, c-format
+msgid "Need to complete marked fields and choose authorization method"
+msgstr "Necesita completar campos marcados y escoger un método de autorización"
-#: src/paths/instance/templates/qr/QrPage.tsx:131
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
#, c-format
msgid ""
-"Here you can specify a default value for fields that are not fixed. Default "
-"values can be edited by the customer before the payment."
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
msgstr ""
-"Aquí puede especificar un valor por defecto para los campos que no son "
-"fijos. Los valores por defecto pueden ser editados por el cliente antes del "
-"pago."
+"Nombre de la instancia en URL. La instancia \"por defecto\" es especial, ya "
+"que se utiliza para administrar otras instancias."
-#: src/paths/instance/templates/qr/QrPage.tsx:148
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "Fixed amount"
-msgstr "Importe fijo"
+msgid "Business name"
+msgstr "Nombre del negocio"
-#: src/paths/instance/templates/qr/QrPage.tsx:149
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
#, c-format
-msgid "Default amount"
-msgstr "Importe por defecto"
+msgid "Legal name of the business represented by this instance."
+msgstr "Nombre legal de la empresa representada por esta instancia."
-#: src/paths/instance/templates/qr/QrPage.tsx:161
-#, fuzzy, c-format
-msgid "Default summary"
-msgstr "Estado de orden"
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
+#, c-format
+msgid "Email"
+msgstr "Correo eletrónico"
-#: src/paths/instance/templates/qr/QrPage.tsx:177
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
#, c-format
-msgid "Print"
-msgstr "Imprimir"
+msgid "Contact email"
+msgstr "Correo electrónico del contacto"
-#: src/paths/instance/templates/qr/QrPage.tsx:184
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
#, c-format
-msgid "Setup TOTP"
-msgstr "Configurar TOTP"
+msgid "Website URL"
+msgstr "URL de sitio web"
-#: src/paths/instance/templates/list/Table.tsx:65
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
#, c-format
-msgid "Templates"
-msgstr "Plantillas"
+msgid "URL."
+msgstr "URL."
-#: src/paths/instance/templates/list/Table.tsx:70
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
#, c-format
-msgid "add new templates"
-msgstr "añadir nuevas plantillas"
+msgid "Logo"
+msgstr "Logotipo"
-#: src/paths/instance/templates/list/Table.tsx:142
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
#, c-format
-msgid "load more templates before the first one"
-msgstr "cargar más plantillas antes de la primera"
+msgid "Logo image."
+msgstr "Imagen del logotipo."
-#: src/paths/instance/templates/list/Table.tsx:146
-#, fuzzy, c-format
-msgid "load newer templates"
-msgstr "cargar nuevas transferencias"
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
+#, c-format
+msgid "Physical location of the merchant."
+msgstr "Ubicación física del comerciante."
-#: src/paths/instance/templates/list/Table.tsx:181
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
#, c-format
-msgid "delete selected templates from the database"
-msgstr "eliminar las plantillas seleccionadas de la base de datos"
+msgid "Jurisdiction"
+msgstr "Jurisdicción"
-#: src/paths/instance/templates/list/Table.tsx:188
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
#, c-format
-msgid "use template to create new order"
-msgstr "utilizar la plantilla para crear un nuevo pedido"
+msgid "Jurisdiction for legal disputes with the merchant."
+msgstr "Jurisdicción para disputas legales con el comerciante."
-#: src/paths/instance/templates/list/Table.tsx:195
-#, fuzzy, c-format
-msgid "create qr code for the template"
-msgstr "No se pudo create el reembolso"
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#, c-format
+msgid "Pay transaction fee"
+msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:210
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
#, c-format
-msgid "load more templates after the last one"
-msgstr "cargar más plantillas después de la última"
+msgid "Assume the cost of the transaction of let the user pay for it."
+msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:214
-#, fuzzy, c-format
-msgid "load older templates"
-msgstr "cargar viejas transferencias"
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#, c-format
+msgid "Default payment delay"
+msgstr "Retraso del pago por defecto"
-#: src/paths/instance/templates/list/Table.tsx:231
-#, fuzzy, c-format
-msgid "There is no templates yet, add more pressing the + sign"
-msgstr "No hay propinas todavía, agregar mas presionando el signo +"
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
+#, c-format
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
+msgstr ""
+"Tiempo que los clientes tienen para pagar un pedido antes de que caduque la "
+"oferta de forma predeterminada."
-#: src/paths/instance/templates/list/index.tsx:104
-#, fuzzy, c-format
-msgid "template delete successfully"
-msgstr "producto fue eliminado correctamente"
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#, c-format
+msgid "Default wire transfer delay"
+msgstr "Retrazo de transferencia por omisión"
-#: src/paths/instance/templates/list/index.tsx:110
-#, fuzzy, c-format
-msgid "could not delete the template"
-msgstr "no se pudo eliminar el producto"
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#, c-format
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
+msgstr ""
+"Tiempo máximo que un proveedor puede retrasar la transferencia de fondos al "
+"comerciante, lo que le permite agrupar pagos más pequeños en transferencias "
+"más grandes y reducir las comisiones por transferencia."
-#: src/paths/instance/templates/update/index.tsx:90
+#: src/paths/instance/update/UpdatePage.tsx:124
+#, c-format
+msgid "Instance id"
+msgstr "ID de instancia"
+
+#: src/paths/instance/update/index.tsx:108
#, fuzzy, c-format
-msgid "could not update template"
-msgstr "no se pudo actualizar el producto"
+msgid "Failed to update instance"
+msgstr "Fallo al crear la instancia"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
+#, c-format
+msgid "Must be \"pay\" or \"refund\""
+msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:57
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
#, fuzzy, c-format
-msgid "should be one of '%1$s'"
+msgid "Must be one of '%1$s'"
msgstr "deberían ser iguales"
#: src/paths/instance/webhooks/create/CreatePage.tsx:85
@@ -2066,753 +3363,932 @@ msgstr "ID de webhook a utilizar"
msgid "Event"
msgstr "Evento"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:90
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
+#, c-format
+msgid "Pay"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
#, c-format
msgid "The event of the webhook: why the webhook is used"
msgstr "El evento del webhook: por qué se utiliza el webhook"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:94
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
#, c-format
msgid "Method"
msgstr "Método"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
+#, c-format
+msgid "GET"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
+#, c-format
+msgid "POST"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
+#, c-format
+msgid "PUT"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#, c-format
+msgid "PATCH"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
+#, c-format
+msgid "HEAD"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
#, c-format
msgid "Method used by the webhook"
msgstr "Método utilizado por el webhook"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
#, c-format
msgid "URL"
msgstr "URL"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:100
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
#, c-format
msgid "URL of the webhook where the customer will be redirected"
msgstr "URL del webhook al que se redirigirá al cliente"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
#, c-format
-msgid "Header"
-msgstr "Cabecera"
+msgid ""
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
+msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:106
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
#, c-format
-msgid "Header template of the webhook"
+msgid "For example %1$s will be replaced with the the order's price"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:111
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
#, c-format
-msgid "Body"
-msgstr "Cuerpo"
+msgid "The short list of variables are:"
+msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:112
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
+#, fuzzy, c-format
+msgid "order's description"
+msgstr "descripción"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
+#, fuzzy, c-format
+msgid "order's price"
+msgstr "Precio de la orden"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
#, c-format
-msgid "Body template by the webhook"
+msgid "order's unique identification"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:61
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
+#, fuzzy, c-format
+msgid "the amount that was being refunded"
+msgstr "monto a ser reembolsado"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
#, c-format
-msgid "Webhooks"
+msgid "the reason entered by the merchant staff for granting the refund"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:66
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
#, c-format
-msgid "add new webhooks"
+msgid "time of the refund in nanoseconds since 1970"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:137
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
#, c-format
-msgid "load more webhooks before the first one"
+msgid "Http body"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:141
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
+#, c-format
+msgid "Body template by the webhook"
+msgstr "Plantilla del cuerpo del webhook"
+
+#: src/paths/instance/webhooks/create/index.tsx:52
+#, fuzzy, c-format
+msgid "Webhook create successfully"
+msgstr "el webhook ha sido borrado correctamente"
+
+#: src/paths/instance/webhooks/create/index.tsx:58
+#, fuzzy, c-format
+msgid "Could not create the webhook"
+msgstr "no se ha podido eliminar el webhook"
+
+#: src/paths/instance/webhooks/create/index.tsx:66
#, fuzzy, c-format
-msgid "load newer webhooks"
-msgstr "cargar nuevas ordenes"
+msgid "Could not create webhook"
+msgstr "no se ha podido eliminar el webhook"
-#: src/paths/instance/webhooks/list/Table.tsx:151
+#: src/paths/instance/webhooks/list/Table.tsx:57
+#, c-format
+msgid "Webhooks"
+msgstr "Webhooks"
+
+#: src/paths/instance/webhooks/list/Table.tsx:62
+#, fuzzy, c-format
+msgid "Add new webhooks"
+msgstr "añadir nuevos webhooks"
+
+#: src/paths/instance/webhooks/list/Table.tsx:117
+#, fuzzy, c-format
+msgid "Load more webhooks before the first one"
+msgstr "cargar más webhooks antes del primero"
+
+#: src/paths/instance/webhooks/list/Table.tsx:130
#, c-format
msgid "Event type"
msgstr "Tipo de evento"
-#: src/paths/instance/webhooks/list/Table.tsx:176
-#, c-format
-msgid "delete selected webhook from the database"
+#: src/paths/instance/webhooks/list/Table.tsx:155
+#, fuzzy, c-format
+msgid "Delete selected webhook from the database"
msgstr "eliminar el webhook seleccionado de la base de datos"
-#: src/paths/instance/webhooks/list/Table.tsx:198
-#, c-format
-msgid "load more webhooks after the last one"
+#: src/paths/instance/webhooks/list/Table.tsx:170
+#, fuzzy, c-format
+msgid "Load more webhooks after the last one"
msgstr "cargar más webhooks después del último"
-#: src/paths/instance/webhooks/list/Table.tsx:202
+#: src/paths/instance/webhooks/list/Table.tsx:190
#, fuzzy, c-format
-msgid "load older webhooks"
-msgstr "cargar viejas ordenes"
+msgid "There are no webhooks yet, add more pressing the + sign"
+msgstr "No hay webhooks todavía, añade más pulsando sobre el símbolo +"
-#: src/paths/instance/webhooks/list/Table.tsx:219
+#: src/paths/instance/webhooks/list/index.tsx:88
#, fuzzy, c-format
-msgid "There is no webhooks yet, add more pressing the + sign"
-msgstr "No hay propinas todavía, agregar mas presionando el signo +"
+msgid "Webhook delete successfully"
+msgstr "el webhook ha sido borrado correctamente"
-#: src/paths/instance/webhooks/list/index.tsx:94
+#: src/paths/instance/webhooks/list/index.tsx:93
#, fuzzy, c-format
-msgid "webhook delete successfully"
-msgstr "producto fue eliminado correctamente"
+msgid "Could not delete the webhook"
+msgstr "no se ha podido eliminar el webhook"
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
+#, c-format
+msgid "Header"
+msgstr "Cabecera"
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
+#, c-format
+msgid "Header template of the webhook"
+msgstr "Plantilla de cabecera del webhook"
-#: src/paths/instance/webhooks/list/index.tsx:100
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
+#, c-format
+msgid "Body"
+msgstr "Cuerpo"
+
+#: src/paths/instance/webhooks/update/index.tsx:88
#, fuzzy, c-format
-msgid "could not delete the webhook"
-msgstr "no se pudo eliminar el producto"
+msgid "Webhook updated"
+msgstr "ID de webhook a utilizar"
-#: src/paths/instance/transfers/create/CreatePage.tsx:63
+#: src/paths/instance/webhooks/update/index.tsx:94
#, fuzzy, c-format
-msgid "check the id, does not look valid"
-msgstr "verificar el id, no parece válido"
+msgid "Could not update webhook"
+msgstr "no se ha podido eliminar el webhook"
-#: src/paths/instance/transfers/create/CreatePage.tsx:65
+#: src/paths/settings/index.tsx:73
#, c-format
-msgid "should have 52 characters, current %1$s"
-msgstr "debería tener 52 caracteres, actualmente %1$s"
+msgid "Language"
+msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:72
+#: src/paths/settings/index.tsx:89
#, c-format
-msgid "URL doesn't have the right format"
-msgstr "La URL no tiene el formato correcto"
+msgid "Advance order creation"
+msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#: src/paths/settings/index.tsx:90
#, c-format
-msgid "Credited bank account"
-msgstr "Abono en cuenta bancaria"
+msgid "Shows more options in the order creation form"
+msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:100
+#: src/paths/settings/index.tsx:94
#, c-format
-msgid "Select one account"
-msgstr "Selecciona una cuenta"
+msgid "Advance instance settings"
+msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:101
+#: src/paths/settings/index.tsx:95
#, c-format
-msgid "Bank account of the merchant where the payment was received"
-msgstr "Cuenta bancaria del comerciante donde se recibió el pago"
+msgid "Shows more options in the instance settings form"
+msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:105
+#: src/paths/settings/index.tsx:100
#, fuzzy, c-format
-msgid "Wire transfer ID"
-msgstr "Id de transferencia"
+msgid "Date format"
+msgstr "formato inválido"
-#: src/paths/instance/transfers/create/CreatePage.tsx:107
+#: src/paths/settings/index.tsx:118
#, c-format
-msgid ""
-"unique identifier of the wire transfer used by the exchange, must be 52 "
-"characters long"
+msgid "How the date is going to be displayed"
+msgstr ""
+
+#: src/paths/settings/index.tsx:121
+#, c-format
+msgid "Developer mode"
msgstr ""
-"identificador único de la transferencia utilizado por la bolsa, debe tener "
-"52 caracteres"
-#: src/paths/instance/transfers/create/CreatePage.tsx:112
+#: src/paths/settings/index.tsx:122
#, c-format
msgid ""
-"Base URL of the exchange that made the transfer, should have been in the "
-"wire transfer subject"
+"Shows more options and tools which are not intended for general audience."
msgstr ""
-"URL base de la bolsa que realizó la transferencia, debería haber estado en "
-"el asunto de la transferencia bancaria"
-#: src/paths/instance/transfers/create/CreatePage.tsx:117
+#: src/paths/instance/categories/list/Table.tsx:133
+#, fuzzy, c-format
+msgid "Total products"
+msgstr "Precio total"
+
+#: src/paths/instance/categories/list/Table.tsx:164
+#, fuzzy, c-format
+msgid "Delete selected category from the database"
+msgstr "eliminar transferencia seleccionada de la base de datos"
+
+#: src/paths/instance/categories/list/Table.tsx:199
+#, fuzzy, c-format
+msgid "There are no categories yet, add more pressing the + sign"
+msgstr "No hay propinas todavía, agregar mas presionando el signo +"
+
+#: src/paths/instance/categories/list/index.tsx:90
+#, fuzzy, c-format
+msgid "Category delete successfully"
+msgstr "producto fue eliminado correctamente"
+
+#: src/paths/instance/categories/list/index.tsx:95
+#, fuzzy, c-format
+msgid "Could not delete the category"
+msgstr "no se pudo eliminar el producto"
+
+#: src/paths/instance/categories/create/CreatePage.tsx:75
#, c-format
-msgid "Amount credited"
-msgstr "Monto abonado"
+msgid "Category name"
+msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:118
+#: src/paths/instance/categories/create/index.tsx:53
+#, fuzzy, c-format
+msgid "Category added successfully"
+msgstr "producto fue eliminado correctamente"
+
+#: src/paths/instance/categories/create/index.tsx:59
+#, fuzzy, c-format
+msgid "Could not add category"
+msgstr "no se pudo crear el producto"
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
#, c-format
-msgid "Actual amount that was wired to the merchant's bank account"
-msgstr "Monto real que se transfirió a la cuenta bancaria del comerciante"
+msgid "Id:"
+msgstr ""
-#: src/paths/instance/transfers/create/index.tsx:58
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
#, c-format
-msgid "could not inform transfer"
-msgstr "no se pudo informar la transferencia"
+msgid "Name of the category"
+msgstr "El nombre de la categoría"
-#: src/paths/instance/transfers/list/Table.tsx:61
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
#, c-format
-msgid "Transfers"
-msgstr "Transferencias"
+msgid "Products"
+msgstr "Productos"
-#: src/paths/instance/transfers/list/Table.tsx:66
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
#, fuzzy, c-format
-msgid "add new transfer"
-msgstr "cargar nuevas transferencias"
+msgid "Search by product description or id"
+msgstr "buscar productos por su descripción o ID"
-#: src/paths/instance/transfers/list/Table.tsx:129
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
#, c-format
-msgid "load more transfers before the first one"
-msgstr "cargar más transferencias antes de la primera"
+msgid "Products that this category will list."
+msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:133
-#, c-format
-msgid "load newer transfers"
-msgstr "cargar nuevas transferencias"
+#: src/paths/instance/categories/update/index.tsx:93
+#, fuzzy, c-format
+msgid "Could not update category"
+msgstr "no se pudo actualizar el producto"
-#: src/paths/instance/transfers/list/Table.tsx:143
+#: src/paths/instance/categories/update/index.tsx:95
#, c-format
-msgid "Credit"
-msgstr "Crédito"
+msgid "Category id is unknown"
+msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:152
+#: src/Routing.tsx:665
#, c-format
-msgid "Confirmed"
-msgstr "Confirmado"
+msgid "Without this the merchant backend will refuse to create new orders."
+msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:155
+#: src/Routing.tsx:675
#, c-format
-msgid "Verified"
-msgstr "Verificado"
+msgid "Hide for today"
+msgstr "Ocultar por hoy"
-#: src/paths/instance/transfers/list/Table.tsx:158
+#: src/Routing.tsx:711
+#, fuzzy, c-format
+msgid "KYC verification needed"
+msgstr "Verificación KYC pendiente"
+
+#: src/Routing.tsx:715
#, c-format
-msgid "Executed at"
-msgstr "Ejecutado en"
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
+msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/components/menu/SideBar.tsx:167
+#, fuzzy, c-format
+msgid "Configuration"
+msgstr "Expiración"
+
+#: src/components/menu/SideBar.tsx:206
#, c-format
-msgid "yes"
-msgstr "si"
+msgid "Settings"
+msgstr "Configuración"
+
+#: src/components/menu/SideBar.tsx:216
+#, fuzzy, c-format
+msgid "Access token"
+msgstr "Token de acceso"
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/components/menu/SideBar.tsx:224
#, c-format
-msgid "no"
-msgstr "no"
+msgid "Connection"
+msgstr "Conexión"
-#: src/paths/instance/transfers/list/Table.tsx:181
+#: src/components/menu/SideBar.tsx:233
#, c-format
-msgid "unknown"
-msgstr "desconocido"
+msgid "Interface"
+msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:187
+#: src/components/menu/SideBar.tsx:274
#, c-format
-msgid "delete selected transfer from the database"
-msgstr "eliminar transferencia seleccionada de la base de datos"
+msgid "List"
+msgstr "Lista"
-#: src/paths/instance/transfers/list/Table.tsx:202
+#: src/components/menu/SideBar.tsx:293
#, c-format
-msgid "load more transfer after the last one"
-msgstr "cargue más transferencia luego de la última"
+msgid "Log out"
+msgstr "Salir"
-#: src/paths/instance/transfers/list/Table.tsx:206
+#: src/paths/admin/create/index.tsx:54
#, c-format
-msgid "load older transfers"
-msgstr "cargar viejas transferencias"
+msgid "Failed to create instance"
+msgstr "Fallo al crear la instancia"
-#: src/paths/instance/transfers/list/Table.tsx:223
+#: src/Application.tsx:208
#, c-format
-msgid "There is no transfer yet, add more pressing the + sign"
-msgstr "No hay transferencias todavía, agregar mas presionando el signo +"
+msgid "checking compatibility with server..."
+msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:79
+#: src/Application.tsx:217
#, fuzzy, c-format
-msgid "filter by account address"
-msgstr "Dirección de cuenta"
+msgid "Contacting the server failed"
+msgstr "No se pudo aceder al servidor"
-#: src/paths/instance/transfers/list/ListPage.tsx:100
+#: src/Application.tsx:229
#, c-format
-msgid "only show wire transfers confirmed by the merchant"
-msgstr "mostrar sólo las transferencias confirmadas por el comerciante"
+msgid "The server version is not supported"
+msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:110
+#: src/Application.tsx:230
#, c-format
-msgid "only show wire transfers claimed by the exchange"
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:113
+#: src/components/form/InputSecured.tsx:37
+#, c-format
+msgid "Deleting"
+msgstr "Borrando"
+
+#: src/components/form/InputSecured.tsx:41
+#, c-format
+msgid "Changing"
+msgstr "Cambiando"
+
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr "Administrar token de acceso"
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
#, fuzzy, c-format
-msgid "Unverified"
-msgstr "Verificado"
+msgid "Business Name"
+msgstr "Nombre del negocio"
-#: src/paths/admin/create/CreatePage.tsx:69
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
#, c-format
-msgid "is not valid"
-msgstr "no es válido"
+msgid "Order ID"
+msgstr "ID de pedido"
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
+#, c-format
+msgid "Payment URL"
+msgstr "URL de pago"
+
+#, c-format
+#~ msgid "Invalid. Only characters and numbers"
+#~ msgstr "Invalido. Solo caracteres y numeros"
-#: src/paths/admin/create/CreatePage.tsx:94
#, fuzzy, c-format
-msgid "is not a number"
-msgstr "Número de edificio"
+#~ msgid "To short"
+#~ msgstr "demasiado corta"
+
+#, fuzzy, c-format
+#~ msgid "Token familty updated successfully"
+#~ msgstr "Familia de tokens actualizada con éxito"
-#: src/paths/admin/create/CreatePage.tsx:96
#, c-format
-msgid "must be 1 or greater"
-msgstr "debe ser 1 o mayor"
+#~ msgid "Timed out"
+#~ msgstr "Expirado"
-#: src/paths/admin/create/CreatePage.tsx:107
#, c-format
-msgid "max 7 lines"
-msgstr "máximo 7 líneas"
+#~ msgid "Target account"
+#~ msgstr "Cuenta objetivo"
-#: src/paths/admin/create/CreatePage.tsx:178
#, c-format
-msgid "change authorization configuration"
-msgstr "cambiar configuración de autorización"
+#~ msgid "cannot be empty"
+#~ msgstr "no puede ser vacío"
-#: src/paths/admin/create/CreatePage.tsx:217
#, c-format
-msgid "Need to complete marked fields and choose authorization method"
-msgstr "Necesita completar campos marcados y escoger un método de autorización"
+#~ msgid "KYC URL"
+#~ msgstr "URL de KYC"
-#: src/components/form/InputPaytoForm.tsx:82
#, c-format
-msgid "This is not a valid bitcoin address."
-msgstr "Esta no es una dirección de bitcoin válida."
+#~ msgid "clear"
+#~ msgstr "limpiar"
-#: src/components/form/InputPaytoForm.tsx:95
#, c-format
-msgid "This is not a valid Ethereum address."
-msgstr "Esta no es una dirección de Ethereum válida."
+#~ msgid "Product"
+#~ msgstr "Producto"
-#: src/components/form/InputPaytoForm.tsx:118
#, c-format
-msgid "IBAN numbers usually have more that 4 digits"
-msgstr "Los números IBAN usualmente tienen mas de 4 digitos"
+#~ msgid "image"
+#~ msgstr "imagen"
-#: src/components/form/InputPaytoForm.tsx:120
#, c-format
-msgid "IBAN numbers usually have less that 34 digits"
-msgstr "Los números IBAN usualmente tienen menos de 34 digitos"
+#~ msgid "quantity"
+#~ msgstr "cantidad"
-#: src/components/form/InputPaytoForm.tsx:128
#, c-format
-msgid "IBAN country code not found"
-msgstr "Código de pais de IBAN no encontrado"
+#~ msgid "total price"
+#~ msgstr "precio total"
-#: src/components/form/InputPaytoForm.tsx:153
#, c-format
-msgid "IBAN number is not valid, checksum is wrong"
-msgstr "El número IBAN no es válido, falló la verificación"
+#~ msgid "not a valid json"
+#~ msgstr "no es un json válido"
-#: src/components/form/InputPaytoForm.tsx:248
#, c-format
-msgid "Target type"
-msgstr "Tipo objetivo"
+#~ msgid "Auto-refund deadline"
+#~ msgstr "Plazo de reembolso automático"
-#: src/components/form/InputPaytoForm.tsx:249
#, c-format
-msgid "Method to use for wire transfer"
-msgstr "Método a usar para la transferencia"
+#~ msgid "Maximum deposit fee"
+#~ msgstr "Máxima tarifa de depósito"
-#: src/components/form/InputPaytoForm.tsx:258
#, c-format
-msgid "Routing"
-msgstr "Enrutamiento"
+#~ msgid ""
+#~ "Maximum aggregate wire fees the merchant is willing to cover for this "
+#~ "order. Wire fees exceeding this amount are to be covered by the customers."
+#~ msgstr ""
+#~ "Máximo total de comisiones por transferencia que el vendedor está "
+#~ "dispuesto a cubrir para este pedido. Los gastos de transferencia que "
+#~ "superen este importe correrán a cargo del cliente."
-#: src/components/form/InputPaytoForm.tsx:259
#, c-format
-msgid "Routing number."
-msgstr "Número de enrutamiento."
+#~ msgid "Wire fee amortization"
+#~ msgstr "Amortización de comisión de transferencia"
-#: src/components/form/InputPaytoForm.tsx:263
#, c-format
-msgid "Account"
-msgstr "Cuenta"
+#~ msgid ""
+#~ "Factor by which wire fees exceeding the above threshold are divided to "
+#~ "determine the share of excess wire fees to be paid explicitly by the "
+#~ "consumer."
+#~ msgstr ""
+#~ "Factor por el que se dividen los comisiones por transferencia que superan "
+#~ "el umbral anterior para determinar la parte del exceso de comisiones por "
+#~ "transferencia que debe pagar explícitamente el consumidor."
-#: src/components/form/InputPaytoForm.tsx:264
-#, fuzzy, c-format
-msgid "Account number."
-msgstr "Dirección de cuenta"
+#, c-format
+#~ msgid ""
+#~ "Uncheck this option if the merchant backend generated an order ID with "
+#~ "enough entropy to prevent adversarial claims."
+#~ msgstr ""
+#~ "Desmarque esta opción si el backend del comerciante ha generado un ID de "
+#~ "pedido con suficiente entropía para evitar reclamaciones de adversarios."
-#: src/components/form/InputPaytoForm.tsx:273
#, c-format
-msgid "Business Identifier Code."
-msgstr "Código de identificación de la empresa."
+#~ msgid "load newer orders"
+#~ msgstr "cargar nuevas ordenes"
-#: src/components/form/InputPaytoForm.tsx:282
#, c-format
-msgid "Bank Account Number."
-msgstr "Número de cuenta bancaria."
+#~ msgid "load older orders"
+#~ msgstr "cargar viejas ordenes"
-#: src/components/form/InputPaytoForm.tsx:292
#, c-format
-msgid "Unified Payment Interface."
-msgstr "Interfaz de pago unificado."
+#~ msgid "date"
+#~ msgstr "fecha"
-#: src/components/form/InputPaytoForm.tsx:301
#, c-format
-msgid "Bitcoin protocol."
-msgstr "Protocolo Bitcoin."
+#~ msgid "amount"
+#~ msgstr "monto"
-#: src/components/form/InputPaytoForm.tsx:310
#, c-format
-msgid "Ethereum protocol."
-msgstr "Protocolo Ethereum."
+#~ msgid "reason"
+#~ msgstr "razón"
-#: src/components/form/InputPaytoForm.tsx:319
#, c-format
-msgid "Interledger protocol."
-msgstr "Protocolo Interledger."
+#~ msgid "Max wire fee"
+#~ msgstr "Impuesto de transferencia máximo"
-#: src/components/form/InputPaytoForm.tsx:328
#, c-format
-msgid "Host"
-msgstr ""
+#~ msgid "maximum wire fee accepted by the merchant"
+#~ msgstr "comisión máxima por transferencia aceptada por el comerciante"
-#: src/components/form/InputPaytoForm.tsx:329
#, c-format
-msgid "Bank host."
-msgstr ""
+#~ msgid ""
+#~ "over how many customer transactions does the merchant expect to amortize "
+#~ "wire fees on average"
+#~ msgstr ""
+#~ "en cuántas transacciones de clientes espera el comerciante amortizar los "
+#~ "gastos de transferencia por término medio"
-#: src/components/form/InputPaytoForm.tsx:334
#, c-format
-msgid "Bank account."
-msgstr "Cuenta bancaria."
+#~ msgid "paid"
+#~ msgstr "pagados"
-#: src/components/form/InputPaytoForm.tsx:343
#, c-format
-msgid "Bank account owner's name."
-msgstr "Nombre del titular de la cuenta bancaria."
+#~ msgid "refunded"
+#~ msgstr "reembolzado"
-#: src/components/form/InputPaytoForm.tsx:370
#, c-format
-msgid "No accounts yet."
-msgstr "Aún no hay cuentas."
+#~ msgid "refund"
+#~ msgstr "reembolzar"
-#: src/components/instance/DefaultInstanceFormFields.tsx:52
#, c-format
-msgid ""
-"Name of the instance in URLs. The 'default' instance is special in that it "
-"is used to administer other instances."
-msgstr ""
-"Nombre de la instancia en URL. La instancia \"por defecto\" es especial, ya "
-"que se utiliza para administrar otras instancias."
+#~ msgid "created at"
+#~ msgstr "creado"
-#: src/components/instance/DefaultInstanceFormFields.tsx:58
-#, fuzzy, c-format
-msgid "Business name"
-msgstr "Nombre de edificio"
+#, c-format
+#~ msgid "date (YYYY/MM/DD)"
+#~ msgstr "Fecha(AAAA/MM/DD)"
-#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "Legal name of the business represented by this instance."
-msgstr "Nombre legal de la empresa representada por esta instancia."
+#~ msgid "could not get the order to refund"
+#~ msgstr "no se ha podido obtener el reembolso para el pedido"
-#: src/components/instance/DefaultInstanceFormFields.tsx:64
#, c-format
-msgid "Email"
-msgstr "Correo eletrónico"
+#~ msgid "Delivery address"
+#~ msgstr "Dirección de entrega"
-#: src/components/instance/DefaultInstanceFormFields.tsx:65
#, c-format
-msgid "Contact email"
-msgstr ""
+#~ msgid "Sell"
+#~ msgstr "Venta"
-#: src/components/instance/DefaultInstanceFormFields.tsx:70
#, c-format
-msgid "Website URL"
-msgstr "URL de sitio web"
+#~ msgid "Profit"
+#~ msgstr "Ganancia"
-#: src/components/instance/DefaultInstanceFormFields.tsx:71
#, c-format
-msgid "URL."
-msgstr "URL."
+#~ msgid "free"
+#~ msgstr "Gratis"
-#: src/components/instance/DefaultInstanceFormFields.tsx:76
#, c-format
-msgid "Logo"
-msgstr "Logotipo"
+#~ msgid ""
+#~ "To complete the setup of the reserve, you must now initiate a wire "
+#~ "transfer using the given wire transfer subject and crediting the "
+#~ "specified amount to the indicated account of the exchange."
+#~ msgstr ""
+#~ "Para completar la configuración de la reserva, ahora debe iniciar una "
+#~ "transferencia bancaria utilizando el asunto de transferencia bancaria "
+#~ "indicado y abonando el importe especificado en la cuenta indicada del "
+#~ "proveedor."
-#: src/components/instance/DefaultInstanceFormFields.tsx:77
#, c-format
-msgid "Logo image."
-msgstr "Imagen del logotipo."
+#~ msgid ""
+#~ "If your system supports RFC 8905, you can do this by opening this URI:"
+#~ msgstr "Si su sistema soporta RFC 8905, puede hacerlo abriendo este URI:"
-#: src/components/instance/DefaultInstanceFormFields.tsx:82
#, c-format
-msgid "Bank account"
-msgstr "Cuenta bancaria"
+#~ msgid "it should be greater than 0"
+#~ msgstr "debe ser mayor que 0"
-#: src/components/instance/DefaultInstanceFormFields.tsx:83
#, c-format
-msgid "URI specifying bank account for crediting revenue."
-msgstr "URI que especifica la cuenta bancaria para acreditar los ingresos."
+#~ msgid "must be a valid URL"
+#~ msgstr "debe ser una URL válida"
-#: src/components/instance/DefaultInstanceFormFields.tsx:88
#, c-format
-msgid "Default max deposit fee"
-msgstr "Impuesto máximo de deposito por omisión"
+#~ msgid "Initial balance"
+#~ msgstr "Balance inicial"
-#: src/components/instance/DefaultInstanceFormFields.tsx:89
#, c-format
-msgid ""
-"Maximum deposit fees this merchant is willing to pay per order by default."
-msgstr ""
-"Comisiones de depósito máximas que este comerciante está dispuesto a pagar "
-"por pedido por defecto."
+#~ msgid "balance prior to deposit"
+#~ msgstr "saldo antes del depósito"
-#: src/components/instance/DefaultInstanceFormFields.tsx:94
#, c-format
-msgid "Default max wire fee"
-msgstr "Impuesto máximo de transferencia por omisión"
+#~ msgid "Next"
+#~ msgstr "Siguiente"
-#: src/components/instance/DefaultInstanceFormFields.tsx:95
#, c-format
-msgid ""
-"Maximum wire fees this merchant is willing to pay per wire transfer by "
-"default."
-msgstr ""
-"Comisiones de transferencia máximas que este comerciante está dispuesto a "
-"pagar por transferencia por defecto."
+#~ msgid "method to use for wire transfer"
+#~ msgstr "método a usar para realizar la transferencia bancaria"
-#: src/components/instance/DefaultInstanceFormFields.tsx:100
#, c-format
-msgid "Default wire fee amortization"
-msgstr "Amortización de impuesto de transferencia por omisión"
+#~ msgid "Select one wire method"
+#~ msgstr "Selecciona un método de transferencia"
-#: src/components/instance/DefaultInstanceFormFields.tsx:101
#, c-format
-msgid ""
-"Number of orders excess wire transfer fees will be divided by to compute per "
-"order surcharge."
-msgstr ""
-"El número de pedidos que excedan las tarifas de transferencia bancaria se "
-"dividirá para calcular el recargo por pedido."
+#~ msgid "Created balance"
+#~ msgstr "Balance creado"
-#: src/components/instance/DefaultInstanceFormFields.tsx:107
#, c-format
-msgid "Physical location of the merchant."
-msgstr "Ubicación física del comerciante."
+#~ msgid "Exchange balance"
+#~ msgstr "Balance del proveedor"
-#: src/components/instance/DefaultInstanceFormFields.tsx:114
#, c-format
-msgid "Jurisdiction"
-msgstr "Jurisdicción"
+#~ msgid "Picked up"
+#~ msgstr "Recogido"
-#: src/components/instance/DefaultInstanceFormFields.tsx:115
#, c-format
-msgid "Jurisdiction for legal disputes with the merchant."
-msgstr "Jurisdicción para disputas legales con el comerciante."
+#~ msgid "Committed"
+#~ msgstr "Comiteado"
+
+#, c-format
+#~ msgid "Tips"
+#~ msgstr "Propinas"
+
+#, c-format
+#~ msgid "No tips has been authorized from this reserve"
+#~ msgstr "No se han autorizado propinas de esta reserva"
+
+#, c-format
+#~ msgid "Authorized"
+#~ msgstr "Autorizado"
-#: src/components/instance/DefaultInstanceFormFields.tsx:122
#, fuzzy, c-format
-msgid "Default payment delay"
-msgstr "Retrazo de pago por omisión"
+#~ msgid "amount of tip"
+#~ msgstr "monto"
+
+#, fuzzy, c-format
+#~ msgid "Justification"
+#~ msgstr "Jurisdicción"
-#: src/components/instance/DefaultInstanceFormFields.tsx:124
#, c-format
-msgid ""
-"Time customers have to pay an order before the offer expires by default."
-msgstr ""
-"Tiempo que los clientes tienen para pagar un pedido antes de que caduque la "
-"oferta de forma predeterminada."
+#~ msgid "reason for the tip"
+#~ msgstr "motivo de la propina"
-#: src/components/instance/DefaultInstanceFormFields.tsx:129
#, c-format
-msgid "Default wire transfer delay"
-msgstr "Retrazo de transferencia por omisión"
+#~ msgid "URL after tip"
+#~ msgstr "URL después de la recompensa"
-#: src/components/instance/DefaultInstanceFormFields.tsx:130
#, c-format
-msgid ""
-"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
-"enabling it to aggregate smaller payments into larger wire transfers and "
-"reducing wire fees."
-msgstr ""
-"Tiempo máximo que se le permite a un intercambio retrasar la transferencia "
-"de fondos al comerciante, lo que le permite agregar pagos más pequeños en "
-"transferencias electrónicas más grandes y reducir las tarifas de "
-"transferencia."
+#~ msgid "URL to visit after tip payment"
+#~ msgstr "URL para visitar después del pago de la propina"
+
+#, fuzzy, c-format
+#~ msgid "Reserves not yet funded"
+#~ msgstr "Servidor no encontrado"
-#: src/paths/instance/update/UpdatePage.tsx:164
#, c-format
-msgid "Instance id"
-msgstr "ID de instancia"
+#~ msgid "Reserves ready"
+#~ msgstr "Reservas listas"
+
+#, c-format
+#~ msgid "Expires at"
+#~ msgstr "Vence en"
+
+#, c-format
+#~ msgid "Initial"
+#~ msgstr "Inicial"
+
+#, c-format
+#~ msgid "authorize new tip from selected reserve"
+#~ msgstr "autorizar nueva punta de reserva seleccionada"
-#: src/paths/instance/update/UpdatePage.tsx:173
#, fuzzy, c-format
-msgid "Change the authorization method use for this instance."
-msgstr ""
-"Limpiar el token de autorización significa acceso público a la instancia"
+#~ msgid ""
+#~ "There is no ready reserves yet, add more pressing the + sign or fund them"
+#~ msgstr "No hay transferencias todavía, agregar mas presionando el signo +"
+
+#, fuzzy, c-format
+#~ msgid "Expected Balance"
+#~ msgstr "Ejecutado en"
+
+#, fuzzy, c-format
+#~ msgid "should not be empty"
+#~ msgstr "no puede ser vacío"
+
+#, fuzzy, c-format
+#~ msgid "should be greater that 0"
+#~ msgstr "Debe ser mayor a 0"
+
+#, fuzzy, c-format
+#~ msgid "Fixed summary"
+#~ msgstr "Estado de orden"
+
+#, fuzzy, c-format
+#~ msgid "Fixed price"
+#~ msgstr "precio unitario"
-#: src/paths/instance/update/UpdatePage.tsx:182
#, c-format
-msgid "Manage access token"
-msgstr "Administrar token de acceso"
+#~ msgid "Point-of-sale key"
+#~ msgstr "Clave punto de venta"
-#: src/paths/instance/update/index.tsx:112
#, c-format
-msgid "Failed to create instance"
-msgstr "Fallo al crear la instancia"
+#~ msgid "Useful to validate the purchase"
+#~ msgstr "Útil para validar la compra"
-#: src/components/exception/login.tsx:74
#, c-format
-msgid "Login required"
-msgstr "Login necesario"
+#~ msgid "show secret key"
+#~ msgstr "mostrar clave secreta"
+
+#, c-format
+#~ msgid "hide secret key"
+#~ msgstr "ocultar clave secreta"
-#: src/components/exception/login.tsx:80
#, c-format
-msgid "Please enter your access token."
-msgstr "Por favor, introduzca su clave de acceso."
+#~ msgid "hide"
+#~ msgstr "ocultar"
+
+#, c-format
+#~ msgid "show"
+#~ msgstr "mostrar"
-#: src/components/exception/login.tsx:108
#, fuzzy, c-format
-msgid "Access Token"
-msgstr "Acceso denegado"
+#~ msgid "could not inform template"
+#~ msgstr "no se pudo informar la transferencia"
-#: src/InstanceRoutes.tsx:171
#, c-format
-msgid "The request to the backend take too long and was cancelled"
-msgstr "La petición al backend tardó demasiado y fue cancelada"
+#~ msgid ""
+#~ "Here you can specify a default value for fields that are not fixed. "
+#~ "Default values can be edited by the customer before the payment."
+#~ msgstr ""
+#~ "Aquí puede especificar un valor por defecto para los campos que no son "
+#~ "fijos. Los valores por defecto pueden ser editados por el cliente antes "
+#~ "del pago."
+
+#, fuzzy, c-format
+#~ msgid "Default summary"
+#~ msgstr "Estado de orden"
-#: src/InstanceRoutes.tsx:172
#, c-format
-msgid "Diagnostic from %1$s is \"%2$s\""
-msgstr ""
+#~ msgid "Setup TOTP"
+#~ msgstr "Configurar TOTP"
+
+#, fuzzy, c-format
+#~ msgid "load older templates"
+#~ msgstr "cargar viejas transferencias"
-#: src/InstanceRoutes.tsx:178
#, fuzzy, c-format
-msgid "The backend reported a problem: HTTP status #%1$s"
-msgstr "Servidir reporto un problema: HTTP status #%1$s"
+#~ msgid "load newer webhooks"
+#~ msgstr "cargar nuevas ordenes"
-#: src/InstanceRoutes.tsx:179
#, c-format
-msgid "Diagnostic from %1$s is '%2$s'"
-msgstr ""
+#~ msgid "load older webhooks"
+#~ msgstr "cargar webhooks antiguos"
-#: src/InstanceRoutes.tsx:196
#, c-format
-msgid "Access denied"
-msgstr "Acceso denegado"
+#~ msgid "load newer transfers"
+#~ msgstr "cargar nuevas transferencias"
-#: src/InstanceRoutes.tsx:197
#, c-format
-msgid "The access token provided is invalid."
-msgstr ""
+#~ msgid "load older transfers"
+#~ msgstr "cargar viejas transferencias"
-#: src/InstanceRoutes.tsx:212
-#, fuzzy, c-format
-msgid "No 'default' instance configured yet."
-msgstr "Sin instancia default"
+#, c-format
+#~ msgid "is not valid"
+#~ msgstr "no es válido"
-#: src/InstanceRoutes.tsx:213
#, c-format
-msgid "Create a 'default' instance to begin using the merchant backoffice."
-msgstr ""
+#~ msgid "must be 1 or greater"
+#~ msgstr "debe ser 1 o mayor"
-#: src/InstanceRoutes.tsx:630
#, c-format
-msgid "The access token provided is invalid"
-msgstr ""
+#~ msgid "change authorization configuration"
+#~ msgstr "cambiar configuración de autorización"
-#: src/InstanceRoutes.tsx:664
#, c-format
-msgid "Hide for today"
-msgstr ""
+#~ msgid "Target type"
+#~ msgstr "Tipo objetivo"
-#: src/components/menu/SideBar.tsx:82
#, c-format
-msgid "Instance"
-msgstr "Instancia"
+#~ msgid "Bank account owner's name."
+#~ msgstr "Nombre del titular de la cuenta bancaria."
-#: src/components/menu/SideBar.tsx:91
#, c-format
-msgid "Settings"
-msgstr "Configuración"
+#~ msgid "No accounts yet."
+#~ msgstr "Aún no hay cuentas."
-#: src/components/menu/SideBar.tsx:167
#, c-format
-msgid "Connection"
-msgstr "Conexión"
+#~ msgid "Default max deposit fee"
+#~ msgstr "Impuesto máximo de deposito por omisión"
-#: src/components/menu/SideBar.tsx:209
#, c-format
-msgid "New"
-msgstr "Nuevo"
+#~ msgid ""
+#~ "Maximum deposit fees this merchant is willing to pay per order by default."
+#~ msgstr ""
+#~ "Comisiones de depósito máximas que este comerciante está dispuesto a "
+#~ "pagar por pedido por defecto."
-#: src/components/menu/SideBar.tsx:219
#, c-format
-msgid "List"
-msgstr "Lista"
+#~ msgid "Default max wire fee"
+#~ msgstr "Impuesto máximo de transferencia por omisión"
-#: src/components/menu/SideBar.tsx:234
#, c-format
-msgid "Log out"
-msgstr "Salir"
+#~ msgid ""
+#~ "Maximum wire fees this merchant is willing to pay per wire transfer by "
+#~ "default."
+#~ msgstr ""
+#~ "Comisiones de transferencia máximas que este comerciante está dispuesto a "
+#~ "pagar por transferencia por defecto."
-#: src/ApplicationReadyRoutes.tsx:71
#, c-format
-msgid "Check your token is valid"
-msgstr "Verifica que el token sea valido"
+#~ msgid "Default wire fee amortization"
+#~ msgstr "Amortización de impuesto de transferencia por omisión"
-#: src/ApplicationReadyRoutes.tsx:90
#, c-format
-msgid "Couldn't access the server."
-msgstr "No se pudo acceder al servidor."
+#~ msgid ""
+#~ "Number of orders excess wire transfer fees will be divided by to compute "
+#~ "per order surcharge."
+#~ msgstr ""
+#~ "El número de pedidos que excedan las tarifas de transferencia bancaria se "
+#~ "dividirá para calcular el recargo por pedido."
-#: src/ApplicationReadyRoutes.tsx:91
#, c-format
-msgid "Could not infer instance id from url %1$s"
-msgstr "No se pudo inferir el id de la instancia con la url %1$s"
+#~ msgid "Change the authorization method use for this instance."
+#~ msgstr "Cambiar el método de autorización a usar para esta instancia."
-#: src/Application.tsx:104
#, c-format
-msgid "Server not found"
-msgstr "Servidor no encontrado"
+#~ msgid "The request to the backend take too long and was cancelled"
+#~ msgstr "La petición al backend tardó demasiado y fue cancelada"
-#: src/Application.tsx:118
#, c-format
-msgid "Server response with an error code"
-msgstr ""
+#~ msgid "Diagnostic from %1$s is \"%2$s\""
+#~ msgstr "El Diagnóstico de %1$s es \"%2$s\""
-#: src/Application.tsx:120
#, c-format
-msgid "Got message %1$s from %2$s"
-msgstr "Recibimos el mensaje %1$s desde %2$s"
+#~ msgid "The backend reported a problem: HTTP status #%1$s"
+#~ msgstr "El backend ha informado de un problema: HTTP status #%1$s"
-#: src/Application.tsx:131
#, c-format
-msgid "Response from server is unreadable, http status: %1$s"
-msgstr ""
+#~ msgid "Diagnostic from %1$s is '%2$s'"
+#~ msgstr "El Diagnóstico de %1$s es '%2$s'"
-#: src/Application.tsx:144
#, c-format
-msgid "Unexpected Error"
-msgstr "Error inesperado"
+#~ msgid "Access denied"
+#~ msgstr "Acceso denegado"
-#: src/components/form/InputArray.tsx:101
#, c-format
-msgid "The value %1$s is invalid for a payment url"
-msgstr "El valor %1$s es invalido para una URL de pago"
+#~ msgid "The access token provided is invalid."
+#~ msgstr "El token de acceso proporcionado no es válido."
-#: src/components/form/InputArray.tsx:110
#, c-format
-msgid "add element to the list"
-msgstr "agregar elemento a la lista"
+#~ msgid "The access token provided is invalid"
+#~ msgstr "El token de acceso proporcionado no es válido"
-#: src/components/form/InputArray.tsx:112
#, c-format
-msgid "add"
-msgstr "Agregar"
+#~ msgid "Instance"
+#~ msgstr "Instancia"
-#: src/components/form/InputSecured.tsx:37
#, c-format
-msgid "Deleting"
-msgstr "Borrando"
+#~ msgid "Check your token is valid"
+#~ msgstr "Verifica que el token sea valido"
-#: src/components/form/InputSecured.tsx:41
#, c-format
-msgid "Changing"
-msgstr "Cambiando"
+#~ msgid "Couldn't access the server."
+#~ msgstr "No se pudo acceder al servidor."
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:87
#, c-format
-msgid "Order ID"
-msgstr "ID de pedido"
+#~ msgid "Could not infer instance id from url %1$s"
+#~ msgstr "No se pudo inferir el id de la instancia con la url %1$s"
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:101
#, c-format
-msgid "Payment URL"
-msgstr "URL de pago"
+#~ msgid "Server not found"
+#~ msgstr "Servidor no encontrado"
+
+#, c-format
+#~ msgid "Got message %1$s from %2$s"
+#~ msgstr "Recibimos el mensaje %1$s desde %2$s"
+
+#, c-format
+#~ msgid "Response from server is unreadable, http status: %1$s"
+#~ msgstr "La respuesta del servidor es ilegible, estado http: %1$s"
#, c-format
-#~ msgid "Couldn't access the server"
-#~ msgstr "No se pudo aceder al servidor"
+#~ msgid "The value %1$s is invalid for a payment url"
+#~ msgstr "El valor %1$s es invalido para una URL de pago"
+
+#, c-format
+#~ msgid "add"
+#~ msgstr "Agregar"
#, c-format
#~ msgid "HTTP status #%1$s: Server reported a problem"
@@ -2862,10 +4338,6 @@ msgstr "URL de pago"
#~ msgstr "este producto no tiene impuestos"
#, c-format
-#~ msgid "Inventory products"
-#~ msgstr "Productos de inventario"
-
-#, c-format
#~ msgid "Total tax"
#~ msgstr "Impuesto total"
diff --git a/packages/merchant-backoffice-ui/src/i18n/fr.po b/packages/merchant-backoffice-ui/src/i18n/fr.po
index 4da5c5b59..0b5e866b3 100644
--- a/packages/merchant-backoffice-ui/src/i18n/fr.po
+++ b/packages/merchant-backoffice-ui/src/i18n/fr.po
@@ -17,8 +17,8 @@ msgstr ""
"Project-Id-Version: Taler Wallet\n"
"Report-Msgid-Bugs-To: taler@gnu.org\n"
"POT-Creation-Date: 2016-11-23 00:00+0100\n"
-"PO-Revision-Date: 2024-02-28 08:07+0000\n"
-"Last-Translator: d0p1 <contact@d0p1.eu>\n"
+"PO-Revision-Date: 2024-11-14 17:39+0000\n"
+"Last-Translator: Emmanuel Benoist <emmanuel.benoist@bfh.ch>\n"
"Language-Team: French <https://weblate.taler.net/projects/gnu-taler/"
"merchant-backoffice/fr/>\n"
"Language: fr\n"
@@ -26,2699 +26,3781 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Generator: Weblate 5.2.1\n"
+"X-Generator: Weblate 5.5.5\n"
-#: src/components/modal/index.tsx:71
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr ""
+"La demande a dépassé le temps de traitement maximum, vérifiez votre "
+"connexion."
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr "La demande a été annulée."
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+"Un grand nombre de demandes ont été adressées au même serveur et cette "
+"action a été ralentie."
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr "La réponse de la demande est malformée."
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr "La demande n'a pas pu être traitée en raison d'un problème de réseau."
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr "Erreur inattendue sur la requête."
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr "Erreur inattendue."
+
+#: src/components/modal/index.tsx:81
#, c-format
msgid "Cancel"
msgstr "Annuler"
-#: src/components/modal/index.tsx:79
-#, c-format
+#: src/components/modal/index.tsx:89
+#, fuzzy, c-format
msgid "%1$s"
-msgstr ""
+msgstr "%1$s"
-#: src/components/modal/index.tsx:84
+#: src/components/modal/index.tsx:94
#, c-format
msgid "Close"
msgstr "Fermer"
-#: src/components/modal/index.tsx:124
+#: src/components/modal/index.tsx:134
#, c-format
msgid "Continue"
msgstr "Continuer"
-#: src/components/modal/index.tsx:178
+#: src/components/modal/index.tsx:194
#, c-format
msgid "Clear"
-msgstr ""
+msgstr "Effacer"
-#: src/components/modal/index.tsx:190
+#: src/components/modal/index.tsx:206
#, c-format
msgid "Confirm"
msgstr "Confirmer"
-#: src/components/modal/index.tsx:296
+#: src/components/modal/index.tsx:248
+#, c-format
+msgid "Required"
+msgstr "Obligatoire"
+
+#: src/components/modal/index.tsx:250
+#, c-format
+msgid "Letter must be a JSON string"
+msgstr "La lettre doit être une chaîne JSON"
+
+#: src/components/modal/index.tsx:252
+#, c-format
+msgid "JSON string is invalid"
+msgstr "La chaine JSON est invalide"
+
+#: src/components/modal/index.tsx:257
+#, c-format
+msgid "Import"
+msgstr "Importer"
+
+#: src/components/modal/index.tsx:258
+#, c-format
+msgid "Importing an account from the bank"
+msgstr "Importer un compte depuis la banque"
+
+#: src/components/modal/index.tsx:265
+#, c-format
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
+msgstr ""
+"Vous pouvez exporter les paramètres de votre compte à partir du profil "
+"Libeufin de compte de votre banque. Collez le contenu dans le champ suivant."
+
+#: src/components/modal/index.tsx:273
+#, c-format
+msgid "Account information"
+msgstr "Informations sur le compte"
+
+#: src/components/modal/index.tsx:338
+#, c-format
+msgid "Correct form"
+msgstr "Formulaire correct"
+
+#: src/components/modal/index.tsx:339
+#, c-format
+msgid "Comparing account details"
+msgstr "Comparaison des détails du compte"
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+"Le test de l'URL des informations du compte a réussi mais les informations "
+"sur le compte retournées sont différentes de celles du formulaire des "
+"détails du compte."
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr "Champs"
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr "Dans le formulaire"
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr "Rapporté"
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr "Type"
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr "IBAN"
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr "Adresse"
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr "Hôte"
+
+#: src/components/modal/index.tsx:402
+#, c-format
+msgid "Account id"
+msgstr "Identifiant de compte"
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr "Nom du propriétaire"
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr "Compte"
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
+msgstr "Serveur de la banque"
+
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr "Compte bancaire"
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr "Code BIC"
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr "OK"
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr "Valider le compte bancaire : %1$s"
+
+#: src/components/modal/index.tsx:477
#, c-format
-msgid "is not the same as the current access token"
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
msgstr ""
+"Vous devez effectuer un virement bancaire avec l'objet spécifié pour valider "
+"que vous êtes bien le propriétaire du compte."
-#: src/components/modal/index.tsx:299
+#: src/components/modal/index.tsx:487
#, c-format
-msgid "cannot be empty"
-msgstr "ne peux pas être vide"
+msgid "Step 1:"
+msgstr "Étape 1 :"
-#: src/components/modal/index.tsx:301
+#: src/components/modal/index.tsx:489
#, c-format
-msgid "cannot be the same as the old token"
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
msgstr ""
+"Copiez ce code et collez-le dans le champ référence/objet de votre "
+"application bancaire ou du site web de votre banque"
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr "Référence"
-#: src/components/modal/index.tsx:305
+#: src/components/modal/index.tsx:499
#, c-format
-msgid "is not the same"
+msgid "Step 2:"
+msgstr "Étape 2 :"
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
msgstr ""
+"Copiez et collez l'IBAN et le nom dans les champs destinataires de votre "
+"application bancaire ou de votre site web"
+
+#: src/components/modal/index.tsx:509
+#, c-format
+msgid "Receiver name"
+msgstr "Nom du bénéficiaire"
-#: src/components/modal/index.tsx:315
+#: src/components/modal/index.tsx:514
#, c-format
-msgid "You are updating the access token from instance with id %1$s"
+msgid "Step 3:"
+msgstr "Étape 3 :"
+
+#: src/components/modal/index.tsx:516
+#, c-format
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
msgstr ""
+"Terminez le virement en choisissant le montant minimal dans votre "
+"application bancaire ou sur votre site web."
-#: src/components/modal/index.tsx:331
+#: src/components/modal/index.tsx:536
#, c-format
-msgid "Old access token"
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
msgstr ""
+"Assurez-vous que TOUTES les données sont correctes, y compris la référence, "
+"et que vous utilisez le compte bancaire sélectionné. Vous pouvez utiliser "
+"les boutons de copie (%1$s) pour éviter les erreurs de frappe ou l'URI « "
+"payto:// » ci-dessous pour copier une seule valeur."
-#: src/components/modal/index.tsx:332
+#: src/components/modal/index.tsx:549
#, c-format
-msgid "access token currently in use"
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
msgstr ""
+"Alternativement, si votre banque prend en charge les URI de type PayTO, vous "
+"pouvez utiliser ce %1$s lien à la place"
-#: src/components/modal/index.tsx:338
+#: src/components/modal/index.tsx:694
#, c-format
-msgid "New access token"
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
msgstr ""
+"Si vous supprimez l'instance nommée %1$s (ID : %2$s), le commerçant ne sera "
+"plus en mesure de traiter les commandes ou les remboursements"
-#: src/components/modal/index.tsx:339
+#: src/components/modal/index.tsx:701
#, c-format
-msgid "next access token to be used"
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
msgstr ""
+"Cette action supprime la clé privée de l'instance, mais préserve toutes les "
+"données de transaction. Vous pouvez toujours accéder à ces données après "
+"avoir supprimé l'instance."
-#: src/components/modal/index.tsx:344
+#: src/components/modal/index.tsx:708
#, c-format
-msgid "Repeat access token"
+msgid "Deleting an instance %1$s ."
+msgstr "Suppression d'une instance %1$s ."
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
msgstr ""
+"Si vous purgez l'instance nommée %1$s (ID : %2$s), vous supprimerez "
+"également toutes ses données de transaction."
-#: src/components/modal/index.tsx:345
+#: src/components/modal/index.tsx:743
#, c-format
-msgid "confirm the same access token"
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
msgstr ""
+"L'instance disparaîtra de votre liste et vous ne pourrez plus accéder à ses "
+"données."
-#: src/components/modal/index.tsx:350
+#: src/components/modal/index.tsx:749
#, c-format
-msgid "Clearing the access token will mean public access to the instance"
+msgid "Purging an instance %1$s ."
+msgstr "Purge d'une instance %1$s ."
+
+#: src/components/modal/index.tsx:786
+#, c-format
+msgid "Is not the same as the current access token"
+msgstr "N'est pas identique au jeton d'accès actuel"
+
+#: src/components/modal/index.tsx:791
+#, c-format
+msgid "Can't be the same as the old token"
+msgstr "Il ne peut pas s'agir du même jeton que l'ancien"
+
+#: src/components/modal/index.tsx:795
+#, c-format
+msgid "Is not the same"
+msgstr "N'est pas le même"
+
+#: src/components/modal/index.tsx:803
+#, fuzzy, c-format
+msgid "You are updating the access token for the instance with id %1$s"
msgstr ""
+"Vous mettez à jour le jeton d'accès de l'instance avec l'identifiant %1$s"
+
+#: src/components/modal/index.tsx:819
+#, c-format
+msgid "Old access token"
+msgstr "Ancien jeton d'accès"
+
+#: src/components/modal/index.tsx:820
+#, c-format
+msgid "Access token currently in use"
+msgstr "Jeton d'accès actuellement utilisé"
-#: src/components/modal/index.tsx:377
+#: src/components/modal/index.tsx:826
#, c-format
-msgid "cannot be the same as the old access token"
+msgid "New access token"
+msgstr "Nouveau jeton d'accès"
+
+#: src/components/modal/index.tsx:827
+#, c-format
+msgid "Next access token to be used"
+msgstr "Prochain jeton d'accès utilisé"
+
+#: src/components/modal/index.tsx:832
+#, c-format
+msgid "Repeat access token"
+msgstr "Répétez le jeton d'accès"
+
+#: src/components/modal/index.tsx:833
+#, c-format
+msgid "Confirm the same access token"
+msgstr "Confirmez le même jeton d'accès"
+
+#: src/components/modal/index.tsx:838
+#, c-format
+msgid "Clearing the access token will mean public access to the instance"
msgstr ""
+"L'effacement du jeton d'accès signifie que l'instance est accessible à tout "
+"le monde"
+
+#: src/components/modal/index.tsx:865
+#, c-format
+msgid "Can't be the same as the old access token"
+msgstr "Ne peut pas être le même que l'ancien jeton d'accès"
-#: src/components/modal/index.tsx:394
+#: src/components/modal/index.tsx:880
#, c-format
msgid "You are setting the access token for the new instance"
-msgstr ""
+msgstr "Vous définissez le jeton d'accès pour la nouvelle instance"
-#: src/components/modal/index.tsx:420
+#: src/components/modal/index.tsx:906
#, c-format
msgid ""
"With external authorization method no check will be done by the merchant "
"backend"
msgstr ""
+"Avec la méthode d'autorisation externe, aucun contrôle n'est effectué par le "
+"backend du commerçant"
-#: src/components/modal/index.tsx:436
+#: src/components/modal/index.tsx:922
#, c-format
msgid "Set external authorization"
-msgstr ""
+msgstr "Définir une autorisation externe"
-#: src/components/modal/index.tsx:448
+#: src/components/modal/index.tsx:934
#, c-format
msgid "Set access token"
-msgstr ""
+msgstr "Définir un jeton d'accès"
-#: src/components/modal/index.tsx:470
+#: src/components/modal/index.tsx:956
#, c-format
msgid "Operation in progress..."
-msgstr ""
+msgstr "Opération en cours..."
-#: src/components/modal/index.tsx:479
+#: src/components/modal/index.tsx:965
#, c-format
msgid "The operation will be automatically canceled after %1$s seconds"
-msgstr ""
+msgstr "L'opération sera automatiquement annulée après %1$s secondes"
-#: src/paths/admin/list/TableActive.tsx:80
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr "Votre mot de passe est incorrect"
+
+#: src/paths/login/index.tsx:70
+#, fuzzy, c-format
+msgid "Your instance cannot be found"
+msgstr "Votre instance n'a pas été trouvée"
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr "Login obligatoire"
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr "Veuillez saisir votre code d'accès pour %1$s."
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr "Jeton d'accès"
+
+#: src/paths/admin/list/TableActive.tsx:79
#, c-format
msgid "Instances"
-msgstr ""
+msgstr "Instances"
-#: src/paths/admin/list/TableActive.tsx:93
+#: src/paths/admin/list/TableActive.tsx:92
#, c-format
msgid "Delete"
-msgstr ""
+msgstr "Effacer"
-#: src/paths/admin/list/TableActive.tsx:99
+#: src/paths/admin/list/TableActive.tsx:98
#, c-format
-msgid "add new instance"
-msgstr ""
+msgid "Add new instance"
+msgstr "Ajouter une nouvelle instance"
-#: src/paths/admin/list/TableActive.tsx:178
+#: src/paths/admin/list/TableActive.tsx:175
#, c-format
msgid "ID"
-msgstr ""
+msgstr "Identifiant"
-#: src/paths/admin/list/TableActive.tsx:181
+#: src/paths/admin/list/TableActive.tsx:178
#, c-format
msgid "Name"
-msgstr ""
+msgstr "Nom"
#: src/paths/admin/list/TableActive.tsx:220
#, c-format
msgid "Edit"
-msgstr ""
+msgstr "Editer"
#: src/paths/admin/list/TableActive.tsx:237
#, c-format
msgid "Purge"
-msgstr ""
+msgstr "Purger"
#: src/paths/admin/list/TableActive.tsx:261
-#, c-format
-msgid "There is no instances yet, add more pressing the + sign"
-msgstr ""
+#, fuzzy, c-format
+msgid "There are no instances yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore d'instances, ajoutez-en en appuyant sur le signe +"
-#: src/paths/admin/list/View.tsx:68
+#: src/paths/admin/list/View.tsx:66
#, c-format
msgid "Only show active instances"
-msgstr ""
+msgstr "N'afficher que les instances actives"
-#: src/paths/admin/list/View.tsx:71
+#: src/paths/admin/list/View.tsx:69
#, c-format
msgid "Active"
-msgstr ""
+msgstr "Actives"
-#: src/paths/admin/list/View.tsx:78
+#: src/paths/admin/list/View.tsx:76
#, c-format
msgid "Only show deleted instances"
-msgstr ""
+msgstr "N'afficher que les instances effacées"
-#: src/paths/admin/list/View.tsx:81
+#: src/paths/admin/list/View.tsx:79
#, c-format
msgid "Deleted"
-msgstr ""
+msgstr "Effacées"
-#: src/paths/admin/list/View.tsx:88
+#: src/paths/admin/list/View.tsx:86
#, c-format
msgid "Show all instances"
-msgstr ""
+msgstr "Afficher toutes les instances"
-#: src/paths/admin/list/View.tsx:91
+#: src/paths/admin/list/View.tsx:89
#, c-format
msgid "All"
-msgstr ""
+msgstr "Toutes"
-#: src/paths/admin/list/index.tsx:101
+#: src/paths/admin/list/index.tsx:100
#, c-format
msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
-msgstr ""
+msgstr "L'instance \"%1$s\" (identifiant : %2$s) a été effacée"
-#: src/paths/admin/list/index.tsx:106
+#: src/paths/admin/list/index.tsx:105
#, c-format
msgid "Failed to delete instance"
-msgstr ""
+msgstr "Echec de la suppression de l'instance"
+
+#: src/paths/admin/list/index.tsx:140
+#, fuzzy, c-format
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
+msgstr "L'instance '%1$s' (identifiant : %2$s) a été totalement purgée"
-#: src/paths/admin/list/index.tsx:124
+#: src/paths/admin/list/index.tsx:145
#, c-format
-msgid "Instance '%1$s' (ID: %2$s) has been disabled"
+msgid "Failed to purge instance"
+msgstr "Echec de la purge de l'instance"
+
+#: src/components/exception/AsyncButton.tsx:43
+#, c-format
+msgid "Loading..."
+msgstr "Chargement ..."
+
+#: src/components/form/InputPaytoForm.tsx:86
+#, c-format
+msgid "This is not a valid bitcoin address."
+msgstr "Ceci n'est pas une adresse Bitcoin valide."
+
+#: src/components/form/InputPaytoForm.tsx:99
+#, c-format
+msgid "This is not a valid Ethereum address."
+msgstr "Ceci n'est pas une adresse Ethereum valide."
+
+#: src/components/form/InputPaytoForm.tsx:128
+#, c-format
+msgid "This is not a valid host."
+msgstr "Ceci n'est pas un serveur valide."
+
+#: src/components/form/InputPaytoForm.tsx:151
+#, c-format
+msgid "IBAN numbers usually have more that 4 digits"
+msgstr "Les numéros IBAN comportent généralement plus de 4 chiffres"
+
+#: src/components/form/InputPaytoForm.tsx:153
+#, c-format
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr "Les numéros IBAN comportent généralement moins de 34 chiffres"
+
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr "Le code pays de l'IBAN n'a pas été trouvé"
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr "Le numéro IBAN n'est pas valide, la somme de contrôle est erronée"
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr "Choisissez un ..."
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr "Méthode à utiliser pour le virement bancaire"
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr "Code bancaire"
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr "Code bancaire."
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr "Numéro de compte."
+
+#: src/components/form/InputPaytoForm.tsx:330
+#, c-format
+msgid "Code"
+msgstr "Code"
+
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr "Code BIC de la banque."
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, c-format
+msgid "International Bank Account Number."
+msgstr "Code IBAN."
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr "Interface de paiement unifiée (Unified Payment Interface)."
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr "Protocole Bitcoin."
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr "Protocole Ethereum."
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr "Protocole Interledger."
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr "Serveur de la banque."
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr "Sans schéma et peut inclure un sous-chemin :"
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr "Compte en banque."
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr "Nom légal de la personne titulaire du compte."
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr "Il doit correspondre au nom du titulaire du compte bancaire."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, c-format
+msgid "Invalid url"
+msgstr "URL invalide"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr "L'URL doit terminer avec un '/'"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr "L'URL ne doit pas contenir de parametres"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr "L'URL ne doit pas comporter de paramètre de hachage"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr "Echec de la requête à l'API de verification des revenus."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr "Le serveur a répondu \"Mauvaise requête\"."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr "Non autorisé, vérifiez les informations d'identification."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, fuzzy, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr "Ce endpoint ne semble par ressembler à une URL Taler Revenue."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
msgstr ""
+"La requête a abouti mais le serveur n'a pas répondu au 'credit_account' et "
+"nous ne pouvons donc pas vérifier que le compte est le même."
-#: src/paths/admin/list/index.tsx:129
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
#, c-format
-msgid "Failed to purge instance"
+msgid "Account:"
+msgstr "Compte :"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
msgstr ""
+"Si la banque supporte l'API Taler Revenue, vous pouvez ajouter l'URL du "
+"endpoint ci-dessous pour garder les informations sur les revenus "
+"synchronisées."
-#: src/paths/instance/kyc/list/ListPage.tsx:41
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
#, c-format
-msgid "Pending KYC verification"
+msgid "Endpoint URL"
+msgstr "URL du endpoint"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
msgstr ""
+"Endroit d'où le commerçant peut télécharger des informations sur les "
+"virements entrants sur ce compte"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, c-format
+msgid "Auth type"
+msgstr "Type d'authentification"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr "Choisir le type d'authentification pour l'URL des info sur le compte"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr "Aucune authentification"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, fuzzy, c-format
+msgid "With password"
+msgstr "Mot de passe"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, c-format
+msgid "With token"
+msgstr "Avec jeton"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, c-format
+msgid "Do not change"
+msgstr "Ne pas changer"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr "Nom d'utilisateur pour accéder aux informations sur le compte."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr "Mot de passe"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr "Mot de passe pour accéder aux informations du compte."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr "Jeton"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, fuzzy, c-format
+msgid "Access token to access the account information."
+msgstr "Nom d'utilisateur pour accéder aux informations sur le compte."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr "Correspondance"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr "Vérifier si les informations correspondent à celles du serveur."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, c-format
+msgid "Not verified"
+msgstr "Non vérifié"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr "Le dernier test était OK"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr "Le dernier test a échoué"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr "Comparer les informations du serveur avec le formulaire de compte"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr "Test"
-#: src/paths/instance/kyc/list/ListPage.tsx:66
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
#, c-format
-msgid "Timed out"
+msgid "Need to complete marked fields"
+msgstr "Besoin de compléter les champs marqués"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, c-format
+msgid "Confirm operation"
+msgstr "Confirmez l'opération"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, c-format
+msgid "Account details"
+msgstr "Détails du compte"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr "Importer depuis la banque"
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, c-format
+msgid "Could not create account"
+msgstr "Impossible de créer le compte"
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr "Aucune instance 'par défaut' n'a encore été configurée."
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
msgstr ""
+"Créer une instance 'par défaut' pour commencer à utiliser le backoffice du "
+"commerçant."
-#: src/paths/instance/kyc/list/ListPage.tsx:103
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, c-format
+msgid "Bank accounts"
+msgstr "Comptes bancaires"
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, c-format
+msgid "Add new account"
+msgstr "Ajouter un nouveau compte"
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, c-format
+msgid "Wire method: Bitcoin"
+msgstr "Méthode de virement : Bitcoin"
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr "SegWit 1"
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr "SegWit 2"
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, c-format
+msgid "Delete selected accounts from the database"
+msgstr "Supprimer les comptes sélectionnés de la base de données"
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, c-format
+msgid "Wire method: x-taler-bank"
+msgstr "Méthode de virement : x-taler-bank"
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, c-format
+msgid "Account name"
+msgstr "Nom du compte"
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, c-format
+msgid "Wire method: IBAN"
+msgstr "Méthode de virement : IBAN"
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, c-format
+msgid "Other accounts"
+msgstr "Autres comptes"
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr "Chemin"
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, fuzzy, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore d'instances, ajoutez-en en appuyant sur le signe +"
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr "Vous devez associer un compte bancaire pour recevoir des fonds."
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr "Sans cela, vous ne pourrez pas créer de nouvelles commandes."
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr "Le compte bancaire a été supprimé avec succès."
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr "Impossible de supprimer le compte bancaire"
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr "Impossible de mettre à jour le compte"
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr "Impossible de supprimer le compte"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr "En attente de vérification KYC"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
#, c-format
msgid "Exchange"
-msgstr ""
+msgstr "Service de paiement"
-#: src/paths/instance/kyc/list/ListPage.tsx:106
+#: src/paths/instance/kyc/list/ListPage.tsx:105
#, c-format
-msgid "Target account"
-msgstr ""
+msgid "Reason"
+msgstr "Référence"
-#: src/paths/instance/kyc/list/ListPage.tsx:109
+#: src/paths/instance/kyc/list/ListPage.tsx:120
#, c-format
-msgid "KYC URL"
-msgstr ""
+msgid "Pending KYC process, click here to complete"
+msgstr "En attente de la procédure KYC, cliquez ici pour terminer"
-#: src/paths/instance/kyc/list/ListPage.tsx:144
+#: src/paths/instance/kyc/list/ListPage.tsx:140
#, c-format
-msgid "Code"
-msgstr ""
+msgid "The exchange require a account verification."
+msgstr "L'exchange requière une vérification du compte."
-#: src/paths/instance/kyc/list/ListPage.tsx:147
+#: src/paths/instance/kyc/list/ListPage.tsx:169
#, c-format
msgid "Http Status"
-msgstr ""
+msgstr "Status HTTP"
-#: src/paths/instance/kyc/list/ListPage.tsx:177
+#: src/paths/instance/kyc/list/ListPage.tsx:199
#, c-format
msgid "No pending kyc verification!"
-msgstr ""
+msgstr "Aucune vérification kyc en cours !"
-#: src/components/form/InputDate.tsx:123
+#: src/components/form/InputDate.tsx:127
#, c-format
-msgid "change value to unknown date"
-msgstr ""
+msgid "Change value to unknown date"
+msgstr "Changer la valeur pour une date inconnue"
-#: src/components/form/InputDate.tsx:124
+#: src/components/form/InputDate.tsx:128
#, c-format
-msgid "change value to empty"
-msgstr ""
+msgid "Change value to empty"
+msgstr "Changer la valeur pour vide"
-#: src/components/form/InputDate.tsx:131
+#: src/components/form/InputDate.tsx:140
#, c-format
-msgid "clear"
-msgstr ""
+msgid "Change value to never"
+msgstr "Changer la valeur pour jamais"
-#: src/components/form/InputDate.tsx:136
+#: src/components/form/InputDate.tsx:145
#, c-format
-msgid "change value to never"
-msgstr ""
+msgid "Never"
+msgstr "Jamais"
-#: src/components/form/InputDate.tsx:141
+#: src/components/picker/DurationPicker.tsx:55
#, c-format
-msgid "never"
-msgstr ""
+msgid "days"
+msgstr "jours"
-#: src/components/form/InputLocation.tsx:29
+#: src/components/picker/DurationPicker.tsx:65
#, c-format
-msgid "Country"
-msgstr ""
+msgid "hours"
+msgstr "heures"
-#: src/components/form/InputLocation.tsx:33
+#: src/components/picker/DurationPicker.tsx:76
#, c-format
-msgid "Address"
-msgstr ""
+msgid "minutes"
+msgstr "minutes"
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr "secondes"
+
+#: src/components/form/InputDuration.tsx:62
+#, c-format
+msgid "Forever"
+msgstr "Pour toujours"
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr "%1$sM"
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr "%1$sY"
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr "%1$sd"
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr "%1$sh"
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr "%1$smin"
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr "%1$ss"
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
+msgstr "Pays"
#: src/components/form/InputLocation.tsx:39
#, c-format
msgid "Building number"
-msgstr ""
+msgstr "Numéro de bâtiment"
#: src/components/form/InputLocation.tsx:41
#, c-format
msgid "Building name"
-msgstr ""
+msgstr "Nom du bâtiment"
#: src/components/form/InputLocation.tsx:42
#, c-format
msgid "Street"
-msgstr ""
+msgstr "Rue"
#: src/components/form/InputLocation.tsx:43
#, c-format
msgid "Post code"
-msgstr ""
+msgstr "Code postal"
#: src/components/form/InputLocation.tsx:44
#, c-format
msgid "Town location"
-msgstr ""
+msgstr "Localisation de la ville"
#: src/components/form/InputLocation.tsx:45
#, c-format
msgid "Town"
-msgstr ""
+msgstr "Ville"
#: src/components/form/InputLocation.tsx:46
#, c-format
msgid "District"
-msgstr ""
+msgstr "District"
#: src/components/form/InputLocation.tsx:49
#, c-format
msgid "Country subdivision"
-msgstr ""
+msgstr "Subdivision du pays"
-#: src/components/form/InputSearchProduct.tsx:66
-#, c-format
-msgid "Product id"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:69
+#: src/components/form/InputSearchOnList.tsx:80
#, c-format
msgid "Description"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:94
-#, c-format
-msgid "Product"
-msgstr ""
+msgstr "Description"
-#: src/components/form/InputSearchProduct.tsx:95
+#: src/components/form/InputSearchOnList.tsx:106
#, c-format
-msgid "search products by it's description or id"
-msgstr ""
+msgid "Enter description or id"
+msgstr "Entrez soit une description soit un identifiant"
-#: src/components/form/InputSearchProduct.tsx:151
+#: src/components/form/InputSearchOnList.tsx:164
#, c-format
-msgid "no products found with that description"
+msgid "no match found with that description or id"
msgstr ""
+"aucune correspondance de trouvée pour cette description ou cet identifiant"
-#: src/components/product/InventoryProductForm.tsx:56
+#: src/components/product/InventoryProductForm.tsx:57
#, c-format
msgid "You must enter a valid product identifier."
-msgstr ""
+msgstr "Vous devez entrer un identifiant de produit valide."
-#: src/components/product/InventoryProductForm.tsx:64
+#: src/components/product/InventoryProductForm.tsx:65
#, c-format
msgid "Quantity must be greater than 0!"
-msgstr ""
+msgstr "La quantité doit être supérieure à 0 !"
-#: src/components/product/InventoryProductForm.tsx:76
+#: src/components/product/InventoryProductForm.tsx:77
#, c-format
msgid ""
"This quantity exceeds remaining stock. Currently, only %1$s units remain "
"unreserved in stock."
msgstr ""
+"Cette quantité dépasse le stock restant. Actuellement, il ne reste que %1$s "
+"unités non réservées en stock."
-#: src/components/product/InventoryProductForm.tsx:109
+#: src/components/product/InventoryProductForm.tsx:100
+#, c-format
+msgid "Search product"
+msgstr "Recherche produit"
+
+#: src/components/product/InventoryProductForm.tsx:112
#, c-format
msgid "Quantity"
-msgstr ""
+msgstr "Quantité"
-#: src/components/product/InventoryProductForm.tsx:110
+#: src/components/product/InventoryProductForm.tsx:113
#, c-format
-msgid "how many products will be added"
-msgstr ""
+msgid "How many products will be added"
+msgstr "Combien de produits seront ajoutés"
-#: src/components/product/InventoryProductForm.tsx:117
+#: src/components/product/InventoryProductForm.tsx:120
#, c-format
msgid "Add from inventory"
-msgstr ""
+msgstr "Ajouter depuis l'inventaire"
-#: src/components/form/InputImage.tsx:105
+#: src/components/form/InputImage.tsx:107
#, c-format
-msgid "Image should be smaller than 1 MB"
-msgstr ""
+msgid "Image must be smaller than 1 MB"
+msgstr "La taille de l'image doit être inférieure à 1Mo"
-#: src/components/form/InputImage.tsx:110
+#: src/components/form/InputImage.tsx:112
#, c-format
msgid "Add"
-msgstr ""
+msgstr "Ajouter"
-#: src/components/form/InputImage.tsx:115
+#: src/components/form/InputImage.tsx:122
#, c-format
msgid "Remove"
-msgstr ""
+msgstr "Effacer"
+
+#: src/components/form/InputTaxes.tsx:47
+#, c-format
+msgid "Invalid"
+msgstr "Invalide"
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr "Ce produit a %1$s taxes applicables configurées."
-#: src/components/form/InputTaxes.tsx:113
+#: src/components/form/InputTaxes.tsx:103
#, c-format
msgid "No taxes configured for this product."
-msgstr ""
+msgstr "Aucune taxe n'est configurée pour ce produit."
-#: src/components/form/InputTaxes.tsx:119
+#: src/components/form/InputTaxes.tsx:109
#, c-format
msgid "Amount"
-msgstr ""
+msgstr "Montant"
-#: src/components/form/InputTaxes.tsx:120
+#: src/components/form/InputTaxes.tsx:110
#, c-format
msgid ""
"Taxes can be in currencies that differ from the main currency used by the "
"merchant."
msgstr ""
+"Les taxes peuvent être libellées dans des monnaies différentes de la monnaie "
+"principale utilisée par le commerçant."
-#: src/components/form/InputTaxes.tsx:122
+#: src/components/form/InputTaxes.tsx:112
#, c-format
msgid ""
"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
msgstr ""
+"Saisissez la devise et la valeur séparées par deux points, par exemple "
+"&quot;USD:2.3&quot ;."
-#: src/components/form/InputTaxes.tsx:131
+#: src/components/form/InputTaxes.tsx:121
#, c-format
msgid "Legal name of the tax, e.g. VAT or import duties."
-msgstr ""
+msgstr "Nom légal de la taxe, par exemple TVA ou droits d'importation."
-#: src/components/form/InputTaxes.tsx:137
+#: src/components/form/InputTaxes.tsx:127
#, c-format
-msgid "add tax to the tax list"
-msgstr ""
+msgid "Add tax to the tax list"
+msgstr "Ajouter une taxe à la liste des taxes"
-#: src/components/product/NonInventoryProductForm.tsx:72
+#: src/components/product/NonInventoryProductForm.tsx:71
#, c-format
-msgid "describe and add a product that is not in the inventory list"
+msgid "Describe and add a product that is not in the inventory list"
msgstr ""
+"Décrire et ajouter un produit qui ne figure pas dans la liste d'inventaire"
-#: src/components/product/NonInventoryProductForm.tsx:75
+#: src/components/product/NonInventoryProductForm.tsx:74
#, c-format
msgid "Add custom product"
-msgstr ""
+msgstr "Ajouter un produit personnalisé"
-#: src/components/product/NonInventoryProductForm.tsx:86
+#: src/components/product/NonInventoryProductForm.tsx:85
#, c-format
msgid "Complete information of the product"
-msgstr ""
+msgstr "Informations complètes sur le produit"
+
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, c-format
+msgid "Must be a number"
+msgstr "Doit être un nombre"
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, c-format
+msgid "Must be grater than 0"
+msgstr "Doit être supérieur à 0"
#: src/components/product/NonInventoryProductForm.tsx:185
#, c-format
msgid "Image"
-msgstr ""
+msgstr "Image"
#: src/components/product/NonInventoryProductForm.tsx:186
#, c-format
-msgid "photo of the product"
-msgstr ""
+msgid "Photo of the product."
+msgstr "Photo du produit."
#: src/components/product/NonInventoryProductForm.tsx:192
#, c-format
-msgid "full product description"
-msgstr ""
+msgid "Full product description."
+msgstr "Description détaillée du produit."
#: src/components/product/NonInventoryProductForm.tsx:196
#, c-format
msgid "Unit"
-msgstr ""
+msgstr "Unité"
#: src/components/product/NonInventoryProductForm.tsx:197
#, c-format
-msgid "name of the product unit"
-msgstr ""
+msgid "Name of the product unit."
+msgstr "Nom de l'unité du produit."
#: src/components/product/NonInventoryProductForm.tsx:201
#, c-format
msgid "Price"
-msgstr ""
+msgstr "Prix"
#: src/components/product/NonInventoryProductForm.tsx:202
#, c-format
-msgid "amount in the current currency"
-msgstr ""
+msgid "Amount in the current currency."
+msgstr "Montant dans la monnaie courante."
-#: src/components/product/NonInventoryProductForm.tsx:211
+#: src/components/product/NonInventoryProductForm.tsx:208
#, c-format
-msgid "Taxes"
-msgstr ""
+msgid "How many products will be added."
+msgstr "Combien de produits seront ajoutés."
-#: src/components/product/ProductList.tsx:38
+#: src/components/product/NonInventoryProductForm.tsx:211
#, c-format
-msgid "image"
-msgstr ""
+msgid "Taxes"
+msgstr "Taxes"
-#: src/components/product/ProductList.tsx:41
+#: src/components/product/ProductList.tsx:46
#, c-format
-msgid "description"
-msgstr ""
+msgid "Unit price"
+msgstr "Prix unitaire"
-#: src/components/product/ProductList.tsx:44
+#: src/components/product/ProductList.tsx:49
#, c-format
-msgid "quantity"
-msgstr ""
+msgid "Total price"
+msgstr "Prix total"
-#: src/components/product/ProductList.tsx:47
+#: src/paths/instance/orders/create/CreatePage.tsx:162
#, c-format
-msgid "unit price"
-msgstr ""
+msgid "Must be greater than 0"
+msgstr "Doit être supérieur à 0"
-#: src/components/product/ProductList.tsx:50
+#: src/paths/instance/orders/create/CreatePage.tsx:173
#, c-format
-msgid "total price"
+msgid "Refund deadline can't be before pay deadline"
msgstr ""
+"La date limite de remboursement ne peut pas être antérieure à la date limite "
+"de paiement"
-#: src/paths/instance/orders/create/CreatePage.tsx:153
+#: src/paths/instance/orders/create/CreatePage.tsx:179
#, c-format
-msgid "required"
+msgid "Wire transfer deadline can't be before refund deadline"
msgstr ""
+"La date limite de virement ne peut pas être antérieure à la date limite de "
+"remboursement"
-#: src/paths/instance/orders/create/CreatePage.tsx:157
+#: src/paths/instance/orders/create/CreatePage.tsx:188
#, c-format
-msgid "not valid"
+msgid "Wire transfer deadline can't be before pay deadline"
msgstr ""
+"La date limite de virement ne peut pas être antérieure à la date limite de "
+"paiement"
-#: src/paths/instance/orders/create/CreatePage.tsx:159
+#: src/paths/instance/orders/create/CreatePage.tsx:196
#, c-format
-msgid "must be greater than 0"
-msgstr ""
+msgid "Must have a refund deadline"
+msgstr "Le délai de remboursement doit être fixé"
-#: src/paths/instance/orders/create/CreatePage.tsx:164
+#: src/paths/instance/orders/create/CreatePage.tsx:201
#, c-format
-msgid "not a valid json"
+msgid "Auto refund can't be after refund deadline"
msgstr ""
+"Le remboursement automatique ne peut pas être effectué après la date limite "
+"de remboursement"
-#: src/paths/instance/orders/create/CreatePage.tsx:170
+#: src/paths/instance/orders/create/CreatePage.tsx:208
#, c-format
-msgid "should be in the future"
-msgstr ""
+msgid "Must be in the future"
+msgstr "Doit être dans le future"
-#: src/paths/instance/orders/create/CreatePage.tsx:173
+#: src/paths/instance/orders/create/CreatePage.tsx:376
#, c-format
-msgid "refund deadline cannot be before pay deadline"
-msgstr ""
+msgid "Simple"
+msgstr "Simple"
-#: src/paths/instance/orders/create/CreatePage.tsx:179
+#: src/paths/instance/orders/create/CreatePage.tsx:388
#, c-format
-msgid "wire transfer deadline cannot be before refund deadline"
-msgstr ""
+msgid "Advanced"
+msgstr "Avancé"
-#: src/paths/instance/orders/create/CreatePage.tsx:190
+#: src/paths/instance/orders/create/CreatePage.tsx:400
#, c-format
-msgid "wire transfer deadline cannot be before pay deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:197
-#, c-format
-msgid "should have a refund deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:202
-#, c-format
-msgid "auto refund cannot be after refund deadline"
-msgstr ""
+msgid "Manage products in order"
+msgstr "Gérer les produits dans l'ordre"
-#: src/paths/instance/orders/create/CreatePage.tsx:360
+#: src/paths/instance/orders/create/CreatePage.tsx:404
#, c-format
-msgid "Manage products in order"
-msgstr ""
+msgid "%1$s products with a total price of %2$s."
+msgstr "%1$s produits pour un prix total de %2$s."
-#: src/paths/instance/orders/create/CreatePage.tsx:369
+#: src/paths/instance/orders/create/CreatePage.tsx:411
#, c-format
msgid "Manage list of products in the order."
-msgstr ""
+msgstr "Gérer la liste des produits dans la commande."
-#: src/paths/instance/orders/create/CreatePage.tsx:391
+#: src/paths/instance/orders/create/CreatePage.tsx:435
#, c-format
msgid "Remove this product from the order."
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:415
-#, c-format
-msgid "Total price"
-msgstr ""
+msgstr "Retirer ce produit de la commande."
-#: src/paths/instance/orders/create/CreatePage.tsx:417
+#: src/paths/instance/orders/create/CreatePage.tsx:461
#, c-format
-msgid "total product price added up"
-msgstr ""
+msgid "Total product price added up"
+msgstr "Prix total des produits additionnés"
-#: src/paths/instance/orders/create/CreatePage.tsx:430
+#: src/paths/instance/orders/create/CreatePage.tsx:474
#, c-format
msgid "Amount to be paid by the customer"
-msgstr ""
+msgstr "Montant à payer par le client"
-#: src/paths/instance/orders/create/CreatePage.tsx:436
+#: src/paths/instance/orders/create/CreatePage.tsx:480
#, c-format
msgid "Order price"
-msgstr ""
+msgstr "Prix de la commande"
-#: src/paths/instance/orders/create/CreatePage.tsx:437
+#: src/paths/instance/orders/create/CreatePage.tsx:481
#, c-format
-msgid "final order price"
-msgstr ""
+msgid "Final order price"
+msgstr "Prix final de la commande"
-#: src/paths/instance/orders/create/CreatePage.tsx:444
+#: src/paths/instance/orders/create/CreatePage.tsx:488
#, c-format
msgid "Summary"
-msgstr ""
+msgstr "Résumé"
-#: src/paths/instance/orders/create/CreatePage.tsx:445
+#: src/paths/instance/orders/create/CreatePage.tsx:489
#, c-format
msgid "Title of the order to be shown to the customer"
-msgstr ""
+msgstr "Titre de la commande à afficher au client"
-#: src/paths/instance/orders/create/CreatePage.tsx:450
+#: src/paths/instance/orders/create/CreatePage.tsx:495
#, c-format
-msgid "Shipping and Fulfillment"
-msgstr ""
+msgid "Shipping and fulfillment"
+msgstr "Expédition et traitement des commandes"
-#: src/paths/instance/orders/create/CreatePage.tsx:455
+#: src/paths/instance/orders/create/CreatePage.tsx:500
#, c-format
msgid "Delivery date"
-msgstr ""
+msgstr "Date de livraison"
-#: src/paths/instance/orders/create/CreatePage.tsx:456
+#: src/paths/instance/orders/create/CreatePage.tsx:501
#, c-format
msgid "Deadline for physical delivery assured by the merchant."
-msgstr ""
+msgstr "Date limite de livraison physique assurée par le commerçant."
-#: src/paths/instance/orders/create/CreatePage.tsx:461
+#: src/paths/instance/orders/create/CreatePage.tsx:506
#, c-format
msgid "Location"
-msgstr ""
+msgstr "Emplacement"
-#: src/paths/instance/orders/create/CreatePage.tsx:462
+#: src/paths/instance/orders/create/CreatePage.tsx:507
#, c-format
-msgid "address where the products will be delivered"
-msgstr ""
+msgid "Address where the products will be delivered"
+msgstr "Adresse de livraison des produits"
-#: src/paths/instance/orders/create/CreatePage.tsx:469
+#: src/paths/instance/orders/create/CreatePage.tsx:514
#, c-format
msgid "Fulfillment URL"
-msgstr ""
+msgstr "URL du service de traitement des commandes"
-#: src/paths/instance/orders/create/CreatePage.tsx:470
+#: src/paths/instance/orders/create/CreatePage.tsx:515
#, c-format
msgid "URL to which the user will be redirected after successful payment."
-msgstr ""
+msgstr "URL vers laquelle l'utilisateur sera redirigé après un paiement réussi."
-#: src/paths/instance/orders/create/CreatePage.tsx:476
+#: src/paths/instance/orders/create/CreatePage.tsx:523
#, c-format
msgid "Taler payment options"
-msgstr ""
+msgstr "Options de paiement Taler"
-#: src/paths/instance/orders/create/CreatePage.tsx:477
+#: src/paths/instance/orders/create/CreatePage.tsx:524
#, c-format
msgid "Override default Taler payment settings for this order"
msgstr ""
+"Remplacer les paramètres de paiement par défaut de Taler pour cette commande"
-#: src/paths/instance/orders/create/CreatePage.tsx:481
+#: src/paths/instance/orders/create/CreatePage.tsx:529
#, c-format
-msgid "Payment deadline"
-msgstr ""
+msgid "Payment time"
+msgstr "Délai de paiement"
-#: src/paths/instance/orders/create/CreatePage.tsx:482
+#: src/paths/instance/orders/create/CreatePage.tsx:535
#, c-format
msgid ""
-"Deadline for the customer to pay for the offer before it expires. Inventory "
-"products will be reserved until this deadline."
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
msgstr ""
+"Délai accordé au client pour payer l'offre avant qu'elle n'expire. Les "
+"produits en stock seront réservés jusqu'à cette date. Le temps commence à "
+"courir après la création de la commande."
-#: src/paths/instance/orders/create/CreatePage.tsx:486
+#: src/paths/instance/orders/create/CreatePage.tsx:552
#, c-format
-msgid "Refund deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:487
-#, c-format
-msgid "Time until which the order can be refunded by the merchant."
-msgstr ""
+msgid "Default"
+msgstr "Par défaut"
-#: src/paths/instance/orders/create/CreatePage.tsx:491
+#: src/paths/instance/orders/create/CreatePage.tsx:561
#, c-format
-msgid "Wire transfer deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:492
-#, c-format
-msgid "Deadline for the exchange to make the wire transfer."
-msgstr ""
+msgid "Refund time"
+msgstr "Délai de remboursement"
-#: src/paths/instance/orders/create/CreatePage.tsx:496
-#, c-format
-msgid "Auto-refund deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:497
+#: src/paths/instance/orders/create/CreatePage.tsx:569
#, c-format
msgid ""
-"Time until which the wallet will automatically check for refunds without "
-"user interaction."
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
msgstr ""
+"Délai pendant lequel la commande peut être remboursée par le commerçant. Le "
+"temps commence à la création de la commande."
-#: src/paths/instance/orders/create/CreatePage.tsx:502
+#: src/paths/instance/orders/create/CreatePage.tsx:594
#, c-format
-msgid "Maximum deposit fee"
-msgstr ""
+msgid "Wire transfer time"
+msgstr "Délai de virement"
-#: src/paths/instance/orders/create/CreatePage.tsx:503
+#: src/paths/instance/orders/create/CreatePage.tsx:602
#, c-format
msgid ""
-"Maximum deposit fees the merchant is willing to cover for this order. Higher "
-"deposit fees must be covered in full by the consumer."
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
msgstr ""
+"Temps nécessaire à l'exchange pour effectuer le virement. Le temps commence "
+"à la création de la commande."
-#: src/paths/instance/orders/create/CreatePage.tsx:507
+#: src/paths/instance/orders/create/CreatePage.tsx:628
#, c-format
-msgid "Maximum wire fee"
-msgstr ""
+msgid "Auto-refund time"
+msgstr "Délai de remboursement automatique"
-#: src/paths/instance/orders/create/CreatePage.tsx:508
+#: src/paths/instance/orders/create/CreatePage.tsx:634
#, c-format
msgid ""
-"Maximum aggregate wire fees the merchant is willing to cover for this order. "
-"Wire fees exceeding this amount are to be covered by the customers."
+"Time until which the wallet will automatically check for refunds without "
+"user interaction."
msgstr ""
+"Délai jusqu'auquel le portefeuille vérifiera automatiquement les "
+"remboursements sans intervention de l'utilisateur."
-#: src/paths/instance/orders/create/CreatePage.tsx:512
+#: src/paths/instance/orders/create/CreatePage.tsx:642
#, c-format
-msgid "Wire fee amortization"
-msgstr ""
+msgid "Maximum fee"
+msgstr "Frais maximums"
-#: src/paths/instance/orders/create/CreatePage.tsx:513
+#: src/paths/instance/orders/create/CreatePage.tsx:643
#, c-format
msgid ""
-"Factor by which wire fees exceeding the above threshold are divided to "
-"determine the share of excess wire fees to be paid explicitly by the "
-"consumer."
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
msgstr ""
+"Frais maximums que le commerçant est prêt à couvrir pour cette commande. Les "
+"frais de dépôt plus élevés doivent être intégralement pris en charge par le "
+"consommateur."
-#: src/paths/instance/orders/create/CreatePage.tsx:517
+#: src/paths/instance/orders/create/CreatePage.tsx:649
#, c-format
msgid "Create token"
-msgstr ""
+msgstr "Créer un jeton"
-#: src/paths/instance/orders/create/CreatePage.tsx:518
+#: src/paths/instance/orders/create/CreatePage.tsx:650
#, c-format
msgid ""
-"Uncheck this option if the merchant backend generated an order ID with "
-"enough entropy to prevent adversarial claims."
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
msgstr ""
+"Si l'identifiant de la commande est facile à deviner, le jeton empêchera les "
+"utilisateurs de voler les commandes d'autres personnes."
-#: src/paths/instance/orders/create/CreatePage.tsx:522
+#: src/paths/instance/orders/create/CreatePage.tsx:656
#, c-format
msgid "Minimum age required"
-msgstr ""
+msgstr "Âge minimum requis"
-#: src/paths/instance/orders/create/CreatePage.tsx:523
+#: src/paths/instance/orders/create/CreatePage.tsx:657
#, c-format
msgid ""
"Any value greater than 0 will limit the coins able be used to pay this "
"contract. If empty the age restriction will be defined by the products"
msgstr ""
+"Toute valeur supérieure à 0 limitera le type de pièces pouvant être "
+"utilisées pour payer ce contrat. Si la valeur est vide, la restriction d'âge "
+"sera définie par les produits"
-#: src/paths/instance/orders/create/CreatePage.tsx:526
+#: src/paths/instance/orders/create/CreatePage.tsx:660
#, c-format
msgid "Min age defined by the producs is %1$s"
-msgstr ""
+msgstr "L'âge minimum défini par les produits est de %1$s"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:661
+#, c-format
+msgid "No product with age restriction in this order"
+msgstr "Aucun produit avec restriction d'âge dans cette commande"
-#: src/paths/instance/orders/create/CreatePage.tsx:534
+#: src/paths/instance/orders/create/CreatePage.tsx:671
#, c-format
msgid "Additional information"
-msgstr ""
+msgstr "Informations complémentaires"
-#: src/paths/instance/orders/create/CreatePage.tsx:535
+#: src/paths/instance/orders/create/CreatePage.tsx:672
#, c-format
msgid "Custom information to be included in the contract for this order."
msgstr ""
+"Informations personnalisées à inclure dans le contrat pour cette commande."
-#: src/paths/instance/orders/create/CreatePage.tsx:541
+#: src/paths/instance/orders/create/CreatePage.tsx:681
#, c-format
msgid "You must enter a value in JavaScript Object Notation (JSON)."
-msgstr ""
-
-#: src/components/picker/DurationPicker.tsx:55
-#, c-format
-msgid "days"
-msgstr ""
-
-#: src/components/picker/DurationPicker.tsx:65
-#, c-format
-msgid "hours"
-msgstr ""
+msgstr "Vous devez saisir une valeur en JavaScript Object Notation (JSON)."
-#: src/components/picker/DurationPicker.tsx:76
+#: src/paths/instance/orders/create/CreatePage.tsx:707
#, c-format
-msgid "minutes"
-msgstr ""
+msgid "Custom field name"
+msgstr "Nom du champ personnalisé"
-#: src/components/picker/DurationPicker.tsx:87
+#: src/paths/instance/orders/create/CreatePage.tsx:793
#, c-format
-msgid "seconds"
-msgstr ""
+msgid "Disabled"
+msgstr "Désactivé"
-#: src/components/form/InputDuration.tsx:53
+#: src/paths/instance/orders/create/CreatePage.tsx:796
#, c-format
-msgid "forever"
-msgstr ""
+msgid "No deadline"
+msgstr "Aucune date limite"
-#: src/components/form/InputDuration.tsx:62
+#: src/paths/instance/orders/create/CreatePage.tsx:797
#, c-format
-msgid "%1$sM"
-msgstr ""
-
-#: src/components/form/InputDuration.tsx:64
-#, c-format
-msgid "%1$sY"
-msgstr ""
-
-#: src/components/form/InputDuration.tsx:66
-#, c-format
-msgid "%1$sd"
-msgstr ""
+msgid "Deadline at %1$s"
+msgstr "Date limite à %1$s"
-#: src/components/form/InputDuration.tsx:68
+#: src/paths/instance/orders/create/index.tsx:109
#, c-format
-msgid "%1$sh"
-msgstr ""
+msgid "Could not create order"
+msgstr "Impossible de créer la commande"
-#: src/components/form/InputDuration.tsx:70
+#: src/paths/instance/orders/create/index.tsx:111
#, c-format
-msgid "%1$smin"
+msgid "No exchange would accept a payment because of KYC requirements."
msgstr ""
+"Aucun exchange ne pourra accepter le paiement en raison des exigences en "
+"matière de connaissance du client (procédure KYC)."
-#: src/components/form/InputDuration.tsx:72
+#: src/paths/instance/orders/create/index.tsx:129
#, c-format
-msgid "%1$ssec"
-msgstr ""
+msgid "No more stock for product with ID \"%1$s\"."
+msgstr "Il n'y a plus de stock pour le produit dont l'identifiant est \"%1$s\"."
#: src/paths/instance/orders/list/Table.tsx:75
#, c-format
msgid "Orders"
-msgstr ""
+msgstr "Commandes"
#: src/paths/instance/orders/list/Table.tsx:81
#, c-format
-msgid "create order"
-msgstr ""
+msgid "Create order"
+msgstr "Créer une commande"
-#: src/paths/instance/orders/list/Table.tsx:147
+#: src/paths/instance/orders/list/Table.tsx:138
#, c-format
-msgid "load newer orders"
-msgstr ""
+msgid "Load first page"
+msgstr "Charger la première page"
-#: src/paths/instance/orders/list/Table.tsx:154
+#: src/paths/instance/orders/list/Table.tsx:145
#, c-format
msgid "Date"
-msgstr ""
+msgstr "Date"
-#: src/paths/instance/orders/list/Table.tsx:200
+#: src/paths/instance/orders/list/Table.tsx:191
#, c-format
msgid "Refund"
-msgstr ""
+msgstr "Remboursement"
-#: src/paths/instance/orders/list/Table.tsx:209
+#: src/paths/instance/orders/list/Table.tsx:200
#, c-format
msgid "copy url"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:225
-#, c-format
-msgid "load older orders"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:242
-#, c-format
-msgid "No orders have been found matching your query!"
-msgstr ""
+msgstr "copiez l'URL"
-#: src/paths/instance/orders/list/Table.tsx:288
+#: src/paths/instance/orders/list/Table.tsx:213
#, c-format
-msgid "duplicated"
-msgstr ""
+msgid "Load more orders after the last one"
+msgstr "Charger d'autres commandes après la dernière"
-#: src/paths/instance/orders/list/Table.tsx:299
+#: src/paths/instance/orders/list/Table.tsx:216
#, c-format
-msgid "invalid format"
-msgstr ""
+msgid "Load next page"
+msgstr "Charger la page suivante"
-#: src/paths/instance/orders/list/Table.tsx:301
+#: src/paths/instance/orders/list/Table.tsx:233
#, c-format
-msgid "this value exceed the refundable amount"
-msgstr ""
+msgid "No orders have been found matching your query!"
+msgstr "Aucune commande n'a été trouvée correspondant à votre requête !"
-#: src/paths/instance/orders/list/Table.tsx:346
+#: src/paths/instance/orders/list/Table.tsx:280
#, c-format
-msgid "date"
-msgstr ""
+msgid "Duplicated"
+msgstr "Dupliqué"
-#: src/paths/instance/orders/list/Table.tsx:349
+#: src/paths/instance/orders/list/Table.tsx:293
#, c-format
-msgid "amount"
-msgstr ""
+msgid "This value exceed the refundable amount"
+msgstr "Cette valeur dépasse le montant remboursable"
-#: src/paths/instance/orders/list/Table.tsx:352
+#: src/paths/instance/orders/list/Table.tsx:381
#, c-format
-msgid "reason"
-msgstr ""
+msgid "Amount to be refunded"
+msgstr "Montant à rembourser"
-#: src/paths/instance/orders/list/Table.tsx:389
-#, c-format
-msgid "amount to be refunded"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:391
+#: src/paths/instance/orders/list/Table.tsx:383
#, c-format
msgid "Max refundable:"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:396
-#, c-format
-msgid "Reason"
-msgstr ""
-
-#: src/paths/instance/orders/list/Table.tsx:397
-#, c-format
-msgid "Choose one..."
-msgstr ""
+msgstr "Remboursement maximum :"
-#: src/paths/instance/orders/list/Table.tsx:399
+#: src/paths/instance/orders/list/Table.tsx:391
#, c-format
-msgid "requested by the customer"
-msgstr ""
+msgid "Requested by the customer"
+msgstr "A la demande du client"
-#: src/paths/instance/orders/list/Table.tsx:400
+#: src/paths/instance/orders/list/Table.tsx:392
#, c-format
-msgid "other"
-msgstr ""
+msgid "Other"
+msgstr "Autre"
-#: src/paths/instance/orders/list/Table.tsx:403
+#: src/paths/instance/orders/list/Table.tsx:395
#, c-format
-msgid "why this order is being refunded"
-msgstr ""
+msgid "Why this order is being refunded"
+msgstr "Pourquoi cette commande est-elle remboursée"
-#: src/paths/instance/orders/list/Table.tsx:409
+#: src/paths/instance/orders/list/Table.tsx:401
#, c-format
-msgid "more information to give context"
-msgstr ""
+msgid "More information to give context"
+msgstr "Plus d'informations pour situer le contexte"
-#: src/paths/instance/orders/details/DetailPage.tsx:62
+#: src/paths/instance/orders/details/DetailPage.tsx:70
#, c-format
-msgid "Contract Terms"
-msgstr ""
+msgid "Contract terms"
+msgstr "Conditions du contrat"
-#: src/paths/instance/orders/details/DetailPage.tsx:68
+#: src/paths/instance/orders/details/DetailPage.tsx:76
#, c-format
-msgid "human-readable description of the whole purchase"
-msgstr ""
+msgid "Human-readable description of the whole purchase"
+msgstr "Description en langage courant de l'ensemble de la transaction"
-#: src/paths/instance/orders/details/DetailPage.tsx:74
+#: src/paths/instance/orders/details/DetailPage.tsx:82
#, c-format
-msgid "total price for the transaction"
-msgstr ""
+msgid "Total price for the transaction"
+msgstr "Prix total de la transaction"
-#: src/paths/instance/orders/details/DetailPage.tsx:81
+#: src/paths/instance/orders/details/DetailPage.tsx:89
#, c-format
msgid "URL for this purchase"
-msgstr ""
+msgstr "URL de cet achat"
-#: src/paths/instance/orders/details/DetailPage.tsx:87
+#: src/paths/instance/orders/details/DetailPage.tsx:95
#, c-format
msgid "Max fee"
-msgstr ""
+msgstr "Frais maximums"
-#: src/paths/instance/orders/details/DetailPage.tsx:88
+#: src/paths/instance/orders/details/DetailPage.tsx:96
#, c-format
-msgid "maximum total deposit fee accepted by the merchant for this contract"
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
msgstr ""
+"Montant total maximum des frais de dépôt acceptés par le commerçant pour ce "
+"contrat"
-#: src/paths/instance/orders/details/DetailPage.tsx:93
+#: src/paths/instance/orders/details/DetailPage.tsx:101
#, c-format
-msgid "Max wire fee"
-msgstr ""
+msgid "Created at"
+msgstr "Créé à"
-#: src/paths/instance/orders/details/DetailPage.tsx:94
+#: src/paths/instance/orders/details/DetailPage.tsx:102
#, c-format
-msgid "maximum wire fee accepted by the merchant"
-msgstr ""
+msgid "Time when this contract was generated"
+msgstr "Heure à laquelle ce contrat a été généré"
-#: src/paths/instance/orders/details/DetailPage.tsx:100
+#: src/paths/instance/orders/details/DetailPage.tsx:107
#, c-format
-msgid ""
-"over how many customer transactions does the merchant expect to amortize "
-"wire fees on average"
-msgstr ""
+msgid "Refund deadline"
+msgstr "Date limite de remboursement"
-#: src/paths/instance/orders/details/DetailPage.tsx:105
+#: src/paths/instance/orders/details/DetailPage.tsx:108
#, c-format
-msgid "Created at"
-msgstr ""
+msgid "After this deadline has passed no refunds will be accepted"
+msgstr "Passé ce délai, aucun remboursement ne sera accepté"
-#: src/paths/instance/orders/details/DetailPage.tsx:106
+#: src/paths/instance/orders/details/DetailPage.tsx:113
#, c-format
-msgid "time when this contract was generated"
-msgstr ""
+msgid "Payment deadline"
+msgstr "Date limite de paiement"
-#: src/paths/instance/orders/details/DetailPage.tsx:112
+#: src/paths/instance/orders/details/DetailPage.tsx:114
#, c-format
-msgid "after this deadline has passed no refunds will be accepted"
+msgid ""
+"After this deadline, the merchant won't accept payments for the contract"
msgstr ""
+"Passé ce délai, le commerçant n'acceptera plus de paiements pour le contrat"
-#: src/paths/instance/orders/details/DetailPage.tsx:118
+#: src/paths/instance/orders/details/DetailPage.tsx:119
#, c-format
-msgid ""
-"after this deadline, the merchant won't accept payments for the contract"
-msgstr ""
+msgid "Wire transfer deadline"
+msgstr "Date limite pour les virements"
-#: src/paths/instance/orders/details/DetailPage.tsx:124
+#: src/paths/instance/orders/details/DetailPage.tsx:120
#, c-format
-msgid "transfer deadline for the exchange"
-msgstr ""
+msgid "Transfer deadline for the exchange"
+msgstr "Date limite de transfert pour l'exchange"
-#: src/paths/instance/orders/details/DetailPage.tsx:130
+#: src/paths/instance/orders/details/DetailPage.tsx:126
#, c-format
-msgid "time indicating when the order should be delivered"
-msgstr ""
+msgid "Time indicating when the order should be delivered"
+msgstr "Date à laquelle la commande doit être livrée"
-#: src/paths/instance/orders/details/DetailPage.tsx:136
+#: src/paths/instance/orders/details/DetailPage.tsx:132
#, c-format
-msgid "where the order will be delivered"
-msgstr ""
+msgid "Where the order will be delivered"
+msgstr "Lieu de livraison de la commande"
-#: src/paths/instance/orders/details/DetailPage.tsx:144
+#: src/paths/instance/orders/details/DetailPage.tsx:140
#, c-format
msgid "Auto-refund delay"
-msgstr ""
+msgstr "Délai de remboursement automatique"
-#: src/paths/instance/orders/details/DetailPage.tsx:145
+#: src/paths/instance/orders/details/DetailPage.tsx:141
#, c-format
msgid ""
-"how long the wallet should try to get an automatic refund for the purchase"
+"How long the wallet should try to get an automatic refund for the purchase"
msgstr ""
+"Combien de temps le portefeuille doit-il essayer d'obtenir un remboursement "
+"automatique de l'achat"
-#: src/paths/instance/orders/details/DetailPage.tsx:150
+#: src/paths/instance/orders/details/DetailPage.tsx:146
#, c-format
msgid "Extra info"
-msgstr ""
+msgstr "Infos supplémentaires"
-#: src/paths/instance/orders/details/DetailPage.tsx:151
+#: src/paths/instance/orders/details/DetailPage.tsx:147
#, c-format
-msgid "extra data that is only interpreted by the merchant frontend"
+msgid "Extra data that is only interpreted by the merchant frontend"
msgstr ""
+"Données supplémentaires qui ne sont interprétées que par le frontend du "
+"commerçant"
-#: src/paths/instance/orders/details/DetailPage.tsx:219
+#: src/paths/instance/orders/details/DetailPage.tsx:220
#, c-format
msgid "Order"
-msgstr ""
+msgstr "Commande"
-#: src/paths/instance/orders/details/DetailPage.tsx:221
+#: src/paths/instance/orders/details/DetailPage.tsx:222
#, c-format
-msgid "claimed"
-msgstr ""
+msgid "Claimed"
+msgstr "Réclamée"
-#: src/paths/instance/orders/details/DetailPage.tsx:247
+#: src/paths/instance/orders/details/DetailPage.tsx:249
#, c-format
-msgid "claimed at"
-msgstr ""
+msgid "Claimed at"
+msgstr "Réclamée à"
-#: src/paths/instance/orders/details/DetailPage.tsx:265
+#: src/paths/instance/orders/details/DetailPage.tsx:271
#, c-format
msgid "Timeline"
-msgstr ""
+msgstr "Calendrier"
-#: src/paths/instance/orders/details/DetailPage.tsx:271
+#: src/paths/instance/orders/details/DetailPage.tsx:277
#, c-format
msgid "Payment details"
-msgstr ""
+msgstr "Modalités de paiement"
-#: src/paths/instance/orders/details/DetailPage.tsx:291
+#: src/paths/instance/orders/details/DetailPage.tsx:297
#, c-format
msgid "Order status"
-msgstr ""
+msgstr "Statut de la commande"
-#: src/paths/instance/orders/details/DetailPage.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:307
#, c-format
msgid "Product list"
-msgstr ""
+msgstr "Liste des produits"
-#: src/paths/instance/orders/details/DetailPage.tsx:451
+#: src/paths/instance/orders/details/DetailPage.tsx:459
#, c-format
-msgid "paid"
-msgstr ""
+msgid "Paid"
+msgstr "Payée"
-#: src/paths/instance/orders/details/DetailPage.tsx:455
+#: src/paths/instance/orders/details/DetailPage.tsx:463
#, c-format
-msgid "wired"
-msgstr ""
+msgid "Wired"
+msgstr "Virement effectué"
-#: src/paths/instance/orders/details/DetailPage.tsx:460
+#: src/paths/instance/orders/details/DetailPage.tsx:468
#, c-format
-msgid "refunded"
-msgstr ""
+msgid "Refunded"
+msgstr "Remboursée"
-#: src/paths/instance/orders/details/DetailPage.tsx:480
+#: src/paths/instance/orders/details/DetailPage.tsx:488
#, c-format
-msgid "refund order"
-msgstr ""
+msgid "Refund order"
+msgstr "Rembourser la commande"
-#: src/paths/instance/orders/details/DetailPage.tsx:481
+#: src/paths/instance/orders/details/DetailPage.tsx:489
#, c-format
-msgid "not refundable"
-msgstr ""
+msgid "Not refundable"
+msgstr "Non remboursable"
-#: src/paths/instance/orders/details/DetailPage.tsx:489
+#: src/paths/instance/orders/details/DetailPage.tsx:519
#, c-format
-msgid "refund"
-msgstr ""
+msgid "Next event in"
+msgstr "Nouvel évènement dans"
-#: src/paths/instance/orders/details/DetailPage.tsx:553
+#: src/paths/instance/orders/details/DetailPage.tsx:555
#, c-format
msgid "Refunded amount"
-msgstr ""
+msgstr "Montant remboursé"
-#: src/paths/instance/orders/details/DetailPage.tsx:560
+#: src/paths/instance/orders/details/DetailPage.tsx:562
#, c-format
msgid "Refund taken"
-msgstr ""
+msgstr "Remboursement pris"
-#: src/paths/instance/orders/details/DetailPage.tsx:570
+#: src/paths/instance/orders/details/DetailPage.tsx:572
#, c-format
msgid "Status URL"
-msgstr ""
+msgstr "URL de l'état"
-#: src/paths/instance/orders/details/DetailPage.tsx:583
+#: src/paths/instance/orders/details/DetailPage.tsx:585
#, c-format
msgid "Refund URI"
-msgstr ""
-
-#: src/paths/instance/orders/details/DetailPage.tsx:636
-#, c-format
-msgid "unpaid"
-msgstr ""
+msgstr "URI de remboursement"
-#: src/paths/instance/orders/details/DetailPage.tsx:654
+#: src/paths/instance/orders/details/DetailPage.tsx:639
#, c-format
-msgid "pay at"
-msgstr ""
+msgid "Unpaid"
+msgstr "Non payé"
-#: src/paths/instance/orders/details/DetailPage.tsx:666
+#: src/paths/instance/orders/details/DetailPage.tsx:657
#, c-format
-msgid "created at"
-msgstr ""
+msgid "Pay at"
+msgstr "Payer à"
-#: src/paths/instance/orders/details/DetailPage.tsx:707
+#: src/paths/instance/orders/details/DetailPage.tsx:710
#, c-format
msgid "Order status URL"
-msgstr ""
+msgstr "URL de l'état de la commande"
-#: src/paths/instance/orders/details/DetailPage.tsx:711
+#: src/paths/instance/orders/details/DetailPage.tsx:714
#, c-format
msgid "Payment URI"
-msgstr ""
+msgstr "URI de payment"
-#: src/paths/instance/orders/details/DetailPage.tsx:740
+#: src/paths/instance/orders/details/DetailPage.tsx:743
#, c-format
msgid ""
"Unknown order status. This is an error, please contact the administrator."
msgstr ""
+"Statut de la commande inconnu. Il s'agit d'une erreur, veuillez contacter "
+"l'administrateur."
-#: src/paths/instance/orders/details/DetailPage.tsx:767
+#: src/paths/instance/orders/details/DetailPage.tsx:770
#, c-format
msgid "Back"
-msgstr ""
+msgstr "Retour"
-#: src/paths/instance/orders/details/index.tsx:79
+#: src/paths/instance/orders/details/index.tsx:88
#, c-format
-msgid "refund created successfully"
-msgstr ""
+msgid "Refund created successfully"
+msgstr "Création réussie du remboursement"
-#: src/paths/instance/orders/details/index.tsx:85
+#: src/paths/instance/orders/details/index.tsx:95
#, c-format
-msgid "could not create the refund"
-msgstr ""
+msgid "Could not create the refund"
+msgstr "Le remboursement n'a pas pu être créé"
-#: src/paths/instance/orders/list/ListPage.tsx:78
+#: src/paths/instance/orders/details/index.tsx:97
#, c-format
-msgid "select date to show nearby orders"
+msgid "There are pending KYC requirements."
msgstr ""
+"Des exigences en matière de connaissance du client (KYC) sont en suspens."
-#: src/paths/instance/orders/list/ListPage.tsx:94
+#: src/components/form/JumpToElementById.tsx:39
#, c-format
-msgid "order id"
-msgstr ""
+msgid "Missing id"
+msgstr "Identifiant manquant"
-#: src/paths/instance/orders/list/ListPage.tsx:100
+#: src/components/form/JumpToElementById.tsx:48
#, c-format
-msgid "jump to order with the given order ID"
-msgstr ""
+msgid "Not found"
+msgstr "Non trouvé"
-#: src/paths/instance/orders/list/ListPage.tsx:122
+#: src/paths/instance/orders/list/ListPage.tsx:83
#, c-format
-msgid "remove all filters"
-msgstr ""
+msgid "Select date to show nearby orders"
+msgstr "Sélectionnez la date pour afficher les commandes proches"
-#: src/paths/instance/orders/list/ListPage.tsx:132
+#: src/paths/instance/orders/list/ListPage.tsx:96
#, c-format
-msgid "only show paid orders"
-msgstr ""
-
-#: src/paths/instance/orders/list/ListPage.tsx:135
-#, c-format
-msgid "Paid"
-msgstr ""
+msgid "Only show paid orders"
+msgstr "Afficher uniquement les commandes payées"
-#: src/paths/instance/orders/list/ListPage.tsx:142
+#: src/paths/instance/orders/list/ListPage.tsx:99
#, c-format
-msgid "only show orders with refunds"
-msgstr ""
+msgid "New"
+msgstr "Nouveau"
-#: src/paths/instance/orders/list/ListPage.tsx:145
+#: src/paths/instance/orders/list/ListPage.tsx:116
#, c-format
-msgid "Refunded"
-msgstr ""
+msgid "Only show orders with refunds"
+msgstr "Afficher uniquement les commandes avec remboursement"
-#: src/paths/instance/orders/list/ListPage.tsx:152
+#: src/paths/instance/orders/list/ListPage.tsx:126
#, c-format
msgid ""
-"only show orders where customers paid, but wire payments from payment "
+"Only show orders where customers paid, but wire payments from payment "
"provider are still pending"
msgstr ""
+"N'afficher que les commandes pour lesquelles les clients ont payé, mais pour "
+"lesquelles les virements du fournisseur de paiement sont encore en attente."
-#: src/paths/instance/orders/list/ListPage.tsx:155
+#: src/paths/instance/orders/list/ListPage.tsx:129
#, c-format
msgid "Not wired"
-msgstr ""
+msgstr "Virement non effectué"
-#: src/paths/instance/orders/list/ListPage.tsx:170
+#: src/paths/instance/orders/list/ListPage.tsx:139
#, c-format
-msgid "clear date filter"
-msgstr ""
+msgid "Completed"
+msgstr "Terminé"
-#: src/paths/instance/orders/list/ListPage.tsx:184
+#: src/paths/instance/orders/list/ListPage.tsx:146
#, c-format
-msgid "date (YYYY/MM/DD)"
-msgstr ""
+msgid "Remove all filters"
+msgstr "Effacer tous les filtres"
-#: src/paths/instance/orders/list/index.tsx:103
+#: src/paths/instance/orders/list/ListPage.tsx:164
#, c-format
-msgid "Enter an order id"
-msgstr ""
+msgid "Clear date filter"
+msgstr "Effacer le filtre de date"
-#: src/paths/instance/orders/list/index.tsx:111
+#: src/paths/instance/orders/list/ListPage.tsx:178
#, c-format
-msgid "order not found"
-msgstr ""
+msgid "Jump to date (%1$s)"
+msgstr "Aller à la date (%1$s)"
-#: src/paths/instance/orders/list/index.tsx:178
+#: src/paths/instance/orders/list/index.tsx:113
#, c-format
-msgid "could not get the order to refund"
-msgstr ""
+msgid "Jump to order with the given product ID"
+msgstr "Aller à la commande en fonction d'un identifiant de produit"
-#: src/components/exception/AsyncButton.tsx:43
+#: src/paths/instance/orders/list/index.tsx:114
#, c-format
-msgid "Loading..."
-msgstr ""
+msgid "Order id"
+msgstr "Identifiant de commande"
-#: src/components/form/InputStock.tsx:99
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
#, c-format
-msgid ""
-"click here to configure the stock of the product, leave it as is and the "
-"backend will not control stock"
-msgstr ""
+msgid "Invalid. Please insert only characters and numbers"
+msgstr "Invalide. Veuillez insérer uniquement des caractères et des chiffres"
-#: src/components/form/InputStock.tsx:109
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
#, c-format
-msgid "Manage stock"
-msgstr ""
+msgid "Just letters and numbers from 2 to 7"
+msgstr "Juste des lettres et des chiffres de 2 à 7"
-#: src/components/form/InputStock.tsx:115
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
#, c-format
-msgid "this product has been configured without stock control"
-msgstr ""
+msgid "Size of the key must be 32"
+msgstr "La taille de la clé doit être 32"
-#: src/components/form/InputStock.tsx:119
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
#, c-format
-msgid "Infinite"
-msgstr ""
+msgid "Internal id on the system"
+msgstr "Identifiant interne au système"
-#: src/components/form/InputStock.tsx:136
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
#, c-format
-msgid "lost cannot be greater than current and incoming (max %1$s)"
-msgstr ""
+msgid "Useful to identify the device physically"
+msgstr "Utile pour identifier physiquement l'appareil"
-#: src/components/form/InputStock.tsx:176
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
#, c-format
-msgid "Incoming"
-msgstr ""
+msgid "Verification algorithm"
+msgstr "Algorithme de vérification"
-#: src/components/form/InputStock.tsx:177
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
#, c-format
-msgid "Lost"
-msgstr ""
+msgid "Algorithm to use to verify transaction in offline mode"
+msgstr "Algorithme à utiliser pour vérifier la transaction en mode hors ligne"
-#: src/components/form/InputStock.tsx:192
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
#, c-format
-msgid "Current"
-msgstr ""
+msgid "Device key"
+msgstr "Clé de l'appareil"
-#: src/components/form/InputStock.tsx:196
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
#, c-format
-msgid "remove stock control for this product"
+msgid "Be sure to be very hard to guess or use the random generator"
msgstr ""
+"Veillez à ce qu'il soit très difficile à deviner ou utilisez le générateur "
+"aléatoire"
-#: src/components/form/InputStock.tsx:202
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
#, c-format
-msgid "without stock"
-msgstr ""
+msgid "Your device need to have exactly the same value"
+msgstr "Votre appareil doit avoir exactement la même valeur"
-#: src/components/form/InputStock.tsx:211
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
#, c-format
-msgid "Next restock"
-msgstr ""
+msgid "Generate random secret key"
+msgstr "Générer une clé secrète aléatoire"
-#: src/components/form/InputStock.tsx:217
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
#, c-format
-msgid "Delivery address"
-msgstr ""
+msgid "Random"
+msgstr "Aléatoire"
-#: src/components/product/ProductForm.tsx:133
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
#, c-format
-msgid "product identification to use in URLs (for internal use only)"
+msgid ""
+"You can scan the next QR code with your device or save the key before "
+"continuing."
msgstr ""
+"Vous pouvez scanner le code QR suivant avec votre appareil ou enregistrer la "
+"clé avant de continuer."
-#: src/components/product/ProductForm.tsx:139
+#: src/paths/instance/otp_devices/create/index.tsx:60
#, c-format
-msgid "illustration of the product for customers"
-msgstr ""
+msgid "Device added successfully"
+msgstr "Appareil ajouté avec succès"
-#: src/components/product/ProductForm.tsx:145
+#: src/paths/instance/otp_devices/create/index.tsx:66
#, c-format
-msgid "product description for customers"
-msgstr ""
+msgid "Could not add device"
+msgstr "Impossible d'ajouter l'appareil"
-#: src/components/product/ProductForm.tsx:149
+#: src/paths/instance/otp_devices/list/Table.tsx:57
#, c-format
-msgid "Age restricted"
-msgstr ""
+msgid "OTP Devices"
+msgstr "Appareils OTP"
-#: src/components/product/ProductForm.tsx:150
+#: src/paths/instance/otp_devices/list/Table.tsx:62
#, c-format
-msgid "is this product restricted for customer below certain age?"
-msgstr ""
+msgid "Add new devices"
+msgstr "Ajouter de nouveaux appareils"
-#: src/components/product/ProductForm.tsx:155
+#: src/paths/instance/otp_devices/list/Table.tsx:117
#, c-format
-msgid ""
-"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
-"items, 5 meters) for customers"
-msgstr ""
+msgid "Load more devices before the first one"
+msgstr "Ajouter d'autres appareils avant le premier"
-#: src/components/product/ProductForm.tsx:160
+#: src/paths/instance/otp_devices/list/Table.tsx:155
#, c-format
-msgid ""
-"sale price for customers, including taxes, for above units of the product"
-msgstr ""
+msgid "Delete selected devices from the database"
+msgstr "Supprimer les appareils sélectionnés de la base de données"
-#: src/components/product/ProductForm.tsx:164
+#: src/paths/instance/otp_devices/list/Table.tsx:170
#, c-format
-msgid "Stock"
-msgstr ""
+msgid "Load more devices after the last one"
+msgstr "Ajouter d'autres appareils après le dernier"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, fuzzy, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore d'instances, ajoutez-en en appuyant sur le signe +"
-#: src/components/product/ProductForm.tsx:166
+#: src/paths/instance/otp_devices/list/index.tsx:90
#, c-format
-msgid ""
-"product inventory for products with finite supply (for internal use only)"
-msgstr ""
+msgid "Device delete successfully"
+msgstr "Suppression de l'appareil réussie"
-#: src/components/product/ProductForm.tsx:171
+#: src/paths/instance/otp_devices/list/index.tsx:95
#, c-format
-msgid "taxes included in the product price, exposed to customers"
-msgstr ""
+msgid "Could not delete the device"
+msgstr "Impossible de supprimer l'appareil"
-#: src/paths/instance/products/create/CreatePage.tsx:66
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
#, c-format
-msgid "Need to complete marked fields"
-msgstr ""
+msgid "Device:"
+msgstr "Appareil :"
-#: src/paths/instance/products/create/index.tsx:51
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
#, c-format
-msgid "could not create product"
-msgstr ""
+msgid "Not modified"
+msgstr "Pas de modification"
-#: src/paths/instance/products/list/Table.tsx:68
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
#, c-format
-msgid "Products"
-msgstr ""
+msgid "Change key"
+msgstr "Changer la clé"
-#: src/paths/instance/products/list/Table.tsx:73
+#: src/paths/instance/otp_devices/update/index.tsx:119
#, c-format
-msgid "add product to inventory"
-msgstr ""
+msgid "Could not update template"
+msgstr "Impossible de changer le modèle"
-#: src/paths/instance/products/list/Table.tsx:137
+#: src/paths/instance/otp_devices/update/index.tsx:121
#, c-format
-msgid "Sell"
-msgstr ""
+msgid "Template id is unknown"
+msgstr "Identifiant du modèle inconnu"
-#: src/paths/instance/products/list/Table.tsx:143
+#: src/paths/instance/otp_devices/update/index.tsx:129
#, c-format
-msgid "Profit"
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
msgstr ""
+"Les informations fournies ne correspondent pas à l'état actuel du modèle"
-#: src/paths/instance/products/list/Table.tsx:149
+#: src/components/form/InputStock.tsx:99
#, c-format
-msgid "Sold"
+msgid ""
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
msgstr ""
+"Cliquez ici pour configurer le stock du produit, laissez-le tel quel et le "
+"backend ne contrôlera pas le stock."
-#: src/paths/instance/products/list/Table.tsx:210
+#: src/components/form/InputStock.tsx:109
#, c-format
-msgid "free"
-msgstr ""
+msgid "Manage stock"
+msgstr "Gestion du stock"
-#: src/paths/instance/products/list/Table.tsx:248
+#: src/components/form/InputStock.tsx:115
#, c-format
-msgid "go to product update page"
-msgstr ""
+msgid "This product has been configured without stock control"
+msgstr "Ce produit a été configuré sans contrôle du stock"
-#: src/paths/instance/products/list/Table.tsx:255
+#: src/components/form/InputStock.tsx:119
#, c-format
-msgid "Update"
-msgstr ""
+msgid "Infinite"
+msgstr "Infini"
-#: src/paths/instance/products/list/Table.tsx:260
+#: src/components/form/InputStock.tsx:136
#, c-format
-msgid "remove this product from the database"
+msgid "Lost can't be greater than current and incoming (max %1$s)"
msgstr ""
+"La perte ne peut pas être supérieure au courant et à l'arrivée (max %1$s)"
-#: src/paths/instance/products/list/Table.tsx:331
+#: src/components/form/InputStock.tsx:169
#, c-format
-msgid "update the product with new price"
-msgstr ""
+msgid "Incoming"
+msgstr "Arrivées"
-#: src/paths/instance/products/list/Table.tsx:341
+#: src/components/form/InputStock.tsx:170
#, c-format
-msgid "update product with new price"
-msgstr ""
+msgid "Lost"
+msgstr "Perte"
-#: src/paths/instance/products/list/Table.tsx:399
+#: src/components/form/InputStock.tsx:185
#, c-format
-msgid "add more elements to the inventory"
-msgstr ""
+msgid "Current"
+msgstr "Courant"
-#: src/paths/instance/products/list/Table.tsx:404
+#: src/components/form/InputStock.tsx:189
#, c-format
-msgid "report elements lost in the inventory"
-msgstr ""
+msgid "Remove stock control for this product"
+msgstr "Supprimer le contrôle des stocks pour ce produit"
-#: src/paths/instance/products/list/Table.tsx:409
+#: src/components/form/InputStock.tsx:195
#, c-format
-msgid "new price for the product"
-msgstr ""
+msgid "without stock"
+msgstr "sans stock"
-#: src/paths/instance/products/list/Table.tsx:421
+#: src/components/form/InputStock.tsx:204
#, c-format
-msgid "the are value with errors"
-msgstr ""
+msgid "Next restock"
+msgstr "Prochain réapprovisionnement"
-#: src/paths/instance/products/list/Table.tsx:422
+#: src/components/form/InputStock.tsx:208
#, c-format
-msgid "update product with new stock and price"
-msgstr ""
+msgid "Warehouse address"
+msgstr "Adresse de l'entrepôt"
-#: src/paths/instance/products/list/Table.tsx:463
+#: src/components/form/InputArray.tsx:118
#, c-format
-msgid "There is no products yet, add more pressing the + sign"
-msgstr ""
+msgid "Add element to the list"
+msgstr "Ajouter l'élément à la liste"
-#: src/paths/instance/products/list/index.tsx:86
+#: src/components/product/ProductForm.tsx:120
#, c-format
-msgid "product updated successfully"
-msgstr ""
+msgid "Invalid amount"
+msgstr "Montant invalide"
-#: src/paths/instance/products/list/index.tsx:92
+#: src/components/product/ProductForm.tsx:191
#, c-format
-msgid "could not update the product"
+msgid "Product identification to use in URLs (for internal use only)."
msgstr ""
+"Identification du produit à utiliser dans les URL (à usage interne "
+"uniquement)."
-#: src/paths/instance/products/list/index.tsx:103
+#: src/components/product/ProductForm.tsx:197
#, c-format
-msgid "product delete successfully"
-msgstr ""
+msgid "Illustration of the product for customers."
+msgstr "Illustration du produit pour les clients."
-#: src/paths/instance/products/list/index.tsx:109
+#: src/components/product/ProductForm.tsx:203
#, c-format
-msgid "could not delete the product"
-msgstr ""
+msgid "Product description for customers."
+msgstr "Description du produit pour les clients."
-#: src/paths/instance/products/update/UpdatePage.tsx:56
+#: src/components/product/ProductForm.tsx:207
#, c-format
-msgid "Product id:"
-msgstr ""
+msgid "Age restriction"
+msgstr "Restriction d'âge"
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:95
+#: src/components/product/ProductForm.tsx:208
#, c-format
-msgid ""
-"To complete the setup of the reserve, you must now initiate a wire transfer "
-"using the given wire transfer subject and crediting the specified amount to "
-"the indicated account of the exchange."
-msgstr ""
+msgid "Is this product restricted for customer below certain age?"
+msgstr "Ce produit est-il interdit aux personnes en dessous d'un certain âge ?"
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:102
+#: src/components/product/ProductForm.tsx:209
#, c-format
-msgid "If your system supports RFC 8905, you can do this by opening this URI:"
-msgstr ""
+msgid "Minimum age of the customer"
+msgstr "Âge minimum du client"
-#: src/paths/instance/reserves/create/CreatePage.tsx:83
+#: src/components/product/ProductForm.tsx:213
#, c-format
-msgid "it should be greater than 0"
-msgstr ""
+msgid "Unit name"
+msgstr "Nom de l'unité"
-#: src/paths/instance/reserves/create/CreatePage.tsx:88
+#: src/components/product/ProductForm.tsx:214
#, c-format
-msgid "must be a valid URL"
+msgid ""
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
msgstr ""
+"Unité décrivant la quantité de produits vendus (par exemple, 2 kilogrammes, "
+"5 litres, 3 articles, 5 mètres) aux clients."
-#: src/paths/instance/reserves/create/CreatePage.tsx:107
+#: src/components/product/ProductForm.tsx:215
#, c-format
-msgid "Initial balance"
-msgstr ""
+msgid "Example: kg, items or liters"
+msgstr "Exemple : kg, pièces ou litres"
-#: src/paths/instance/reserves/create/CreatePage.tsx:108
+#: src/components/product/ProductForm.tsx:219
#, c-format
-msgid "balance prior to deposit"
-msgstr ""
+msgid "Price per unit"
+msgstr "Prix à l'unité"
-#: src/paths/instance/reserves/create/CreatePage.tsx:112
+#: src/components/product/ProductForm.tsx:220
#, c-format
-msgid "Exchange URL"
+msgid ""
+"Sale price for customers, including taxes, for above units of the product."
msgstr ""
+"Prix de vente TTC des produits pour les clients, correspondant aux unités de "
+"produits ci-dessus."
-#: src/paths/instance/reserves/create/CreatePage.tsx:113
+#: src/components/product/ProductForm.tsx:224
#, c-format
-msgid "URL of exchange"
-msgstr ""
+msgid "Stock"
+msgstr "Stock"
-#: src/paths/instance/reserves/create/CreatePage.tsx:148
+#: src/components/product/ProductForm.tsx:226
#, c-format
-msgid "Next"
+msgid "Inventory for products with finite supply (for internal use only)."
msgstr ""
+"Inventaire des produits dont l'offre est limitée (à usage interne "
+"uniquement)."
-#: src/paths/instance/reserves/create/CreatePage.tsx:186
+#: src/components/product/ProductForm.tsx:231
#, c-format
-msgid "Wire method"
-msgstr ""
+msgid "Taxes included in the product price, exposed to customers."
+msgstr "Taxes incluses dans le prix du produit, communiquées aux clients."
-#: src/paths/instance/reserves/create/CreatePage.tsx:187
+#: src/components/product/ProductForm.tsx:235
#, c-format
-msgid "method to use for wire transfer"
-msgstr ""
+msgid "Categories"
+msgstr "Catégories"
-#: src/paths/instance/reserves/create/CreatePage.tsx:189
+#: src/components/product/ProductForm.tsx:241
#, c-format
-msgid "Select one wire method"
-msgstr ""
+msgid "Search by category description or id"
+msgstr "Recherche par description de catégorie ou par identifiant"
-#: src/paths/instance/reserves/create/index.tsx:62
+#: src/components/product/ProductForm.tsx:242
#, c-format
-msgid "could not create reserve"
-msgstr ""
+msgid "Categories where this product will be listed on."
+msgstr "Catégories dans lesquelles ce produit sera rangé."
-#: src/paths/instance/reserves/details/DetailPage.tsx:77
+#: src/paths/instance/products/create/index.tsx:52
#, c-format
-msgid "Valid until"
-msgstr ""
+msgid "Product created successfully"
+msgstr "Produit créé avec succès"
-#: src/paths/instance/reserves/details/DetailPage.tsx:82
+#: src/paths/instance/products/create/index.tsx:58
#, c-format
-msgid "Created balance"
-msgstr ""
+msgid "Could not create product"
+msgstr "Impossible de créer le produit"
-#: src/paths/instance/reserves/details/DetailPage.tsx:99
+#: src/paths/instance/products/list/Table.tsx:76
#, c-format
-msgid "Exchange balance"
-msgstr ""
+msgid "Inventory"
+msgstr "Inventaire"
-#: src/paths/instance/reserves/details/DetailPage.tsx:104
+#: src/paths/instance/products/list/Table.tsx:81
#, c-format
-msgid "Picked up"
-msgstr ""
+msgid "Add product to inventory"
+msgstr "Ajouter le produit à l'inventaire"
-#: src/paths/instance/reserves/details/DetailPage.tsx:109
+#: src/paths/instance/products/list/Table.tsx:163
#, c-format
-msgid "Committed"
-msgstr ""
+msgid "Sales"
+msgstr "Ventes"
-#: src/paths/instance/reserves/details/DetailPage.tsx:116
+#: src/paths/instance/products/list/Table.tsx:169
#, c-format
-msgid "Account address"
-msgstr ""
+msgid "Sold"
+msgstr "Vendu"
-#: src/paths/instance/reserves/details/DetailPage.tsx:119
+#: src/paths/instance/products/list/Table.tsx:235
#, c-format
-msgid "Subject"
-msgstr ""
+msgid "Free"
+msgstr "Libre"
-#: src/paths/instance/reserves/details/DetailPage.tsx:130
+#: src/paths/instance/products/list/Table.tsx:275
#, c-format
-msgid "Tips"
-msgstr ""
+msgid "Go to product update page"
+msgstr "Aller à la page de modification du produit"
-#: src/paths/instance/reserves/details/DetailPage.tsx:193
+#: src/paths/instance/products/list/Table.tsx:282
#, c-format
-msgid "No tips has been authorized from this reserve"
-msgstr ""
+msgid "Update"
+msgstr "Modification"
-#: src/paths/instance/reserves/details/DetailPage.tsx:213
+#: src/paths/instance/products/list/Table.tsx:287
#, c-format
-msgid "Authorized"
-msgstr ""
+msgid "Remove this product from the database"
+msgstr "Effacer ce produit de la base de données"
-#: src/paths/instance/reserves/details/DetailPage.tsx:222
+#: src/paths/instance/products/list/Table.tsx:323
#, c-format
-msgid "Expiration"
-msgstr ""
+msgid "Load more products after the last one"
+msgstr "Ajouter des produits après le dernier"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:108
+#: src/paths/instance/products/list/Table.tsx:365
#, c-format
-msgid "amount of tip"
-msgstr ""
+msgid "Update the product with new price"
+msgstr "Modifier le prix du produit"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:112
+#: src/paths/instance/products/list/Table.tsx:376
#, c-format
-msgid "Justification"
-msgstr ""
+msgid "Update product with new price"
+msgstr "Modifier le prix du produit"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:114
+#: src/paths/instance/products/list/Table.tsx:387
#, c-format
-msgid "reason for the tip"
-msgstr ""
+msgid "Confirm update"
+msgstr "Confirmer la modification"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:118
+#: src/paths/instance/products/list/Table.tsx:435
#, c-format
-msgid "URL after tip"
-msgstr ""
+msgid "Add more elements to the inventory"
+msgstr "Ajouter d'autres éléments à l'inventaire"
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:119
+#: src/paths/instance/products/list/Table.tsx:440
#, c-format
-msgid "URL to visit after tip payment"
-msgstr ""
+msgid "Report elements lost in the inventory"
+msgstr "Signaler les éléments perdus dans l'inventaire"
-#: src/paths/instance/reserves/list/Table.tsx:65
+#: src/paths/instance/products/list/Table.tsx:445
#, c-format
-msgid "Reserves not yet funded"
-msgstr ""
+msgid "New price for the product"
+msgstr "Nouveau prix pour le produit"
-#: src/paths/instance/reserves/list/Table.tsx:89
+#: src/paths/instance/products/list/Table.tsx:457
#, c-format
-msgid "Reserves ready"
-msgstr ""
+msgid "The are value with errors"
+msgstr "Certaines valeurs ont des erreurs"
-#: src/paths/instance/reserves/list/Table.tsx:95
+#: src/paths/instance/products/list/Table.tsx:458
#, c-format
-msgid "add new reserve"
-msgstr ""
+msgid "Update product with new stock and price"
+msgstr "Changer le stock et le prix du produit"
-#: src/paths/instance/reserves/list/Table.tsx:143
+#: src/paths/instance/products/list/Table.tsx:499
#, c-format
-msgid "Expires at"
-msgstr ""
+msgid "There are no products yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore de produits, ajoutez-en en appuyant sur le signe +"
-#: src/paths/instance/reserves/list/Table.tsx:146
+#: src/paths/instance/products/list/index.tsx:86
#, c-format
-msgid "Initial"
-msgstr ""
+msgid "Jump to product with the given product ID"
+msgstr "Aller directement au produit avec son identifiant"
-#: src/paths/instance/reserves/list/Table.tsx:202
+#: src/paths/instance/products/list/index.tsx:87
#, c-format
-msgid "delete selected reserve from the database"
-msgstr ""
+msgid "Product id"
+msgstr "Identifiant du produit"
-#: src/paths/instance/reserves/list/Table.tsx:210
+#: src/paths/instance/products/list/index.tsx:104
#, c-format
-msgid "authorize new tip from selected reserve"
-msgstr ""
+msgid "Product updated successfully"
+msgstr "Modification du produit réussie"
-#: src/paths/instance/reserves/list/Table.tsx:237
+#: src/paths/instance/products/list/index.tsx:109
#, c-format
-msgid ""
-"There is no ready reserves yet, add more pressing the + sign or fund them"
-msgstr ""
+msgid "Could not update the product"
+msgstr "Modification du produit impossible"
-#: src/paths/instance/reserves/list/Table.tsx:264
+#: src/paths/instance/products/list/index.tsx:144
#, c-format
-msgid "Expected Balance"
-msgstr ""
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
+msgstr "Le produit \"%1$s\" (identifiant : %2$s) a été effacé"
-#: src/paths/instance/reserves/list/index.tsx:110
+#: src/paths/instance/products/list/index.tsx:149
#, c-format
-msgid "could not create the tip"
-msgstr ""
+msgid "Could not delete the product"
+msgstr "Impossible d'effacer le produit"
-#: src/paths/instance/templates/create/CreatePage.tsx:77
+#: src/paths/instance/products/list/index.tsx:165
#, c-format
-msgid "should not be empty"
+msgid ""
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
msgstr ""
+"Si vous effacez le produit nommé %1$s (identifiant : %2$s), le stock et "
+"toutes les informations liées seront perdus"
-#: src/paths/instance/templates/create/CreatePage.tsx:93
+#: src/paths/instance/products/list/index.tsx:173
#, c-format
-msgid "should be greater that 0"
-msgstr ""
+msgid "Deleting an product can't be undone."
+msgstr "La suppression d'un produit est irréversible."
-#: src/paths/instance/templates/create/CreatePage.tsx:96
+#: src/paths/instance/products/update/UpdatePage.tsx:56
#, c-format
-msgid "can't be empty"
-msgstr ""
+msgid "Product id:"
+msgstr "Identifiant du produit :"
-#: src/paths/instance/templates/create/CreatePage.tsx:100
+#: src/paths/instance/products/update/index.tsx:85
#, c-format
-msgid "to short"
-msgstr ""
+msgid "Product (ID: %1$s) has been updated"
+msgstr "Le produit (identifiant: %1$s) a été modifié"
-#: src/paths/instance/templates/create/CreatePage.tsx:108
+#: src/paths/instance/products/update/index.tsx:91
#, c-format
-msgid "just letters and numbers from 2 to 7"
-msgstr ""
+msgid "Could not update product"
+msgstr "Modification du produit impossible"
-#: src/paths/instance/templates/create/CreatePage.tsx:110
+#: src/paths/instance/templates/create/CreatePage.tsx:112
#, c-format
-msgid "size of the key should be 32"
-msgstr ""
+msgid "Must be greater that 0"
+msgstr "Doit être supérieur à 0"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:119
+#, c-format
+msgid "Too short"
+msgstr "Trop court"
-#: src/paths/instance/templates/create/CreatePage.tsx:137
+#: src/paths/instance/templates/create/CreatePage.tsx:192
#, c-format
msgid "Identifier"
-msgstr ""
+msgstr "Identifiant"
-#: src/paths/instance/templates/create/CreatePage.tsx:138
+#: src/paths/instance/templates/create/CreatePage.tsx:193
#, c-format
msgid "Name of the template in URLs."
-msgstr ""
+msgstr "Nom du modèle dans les URLs."
-#: src/paths/instance/templates/create/CreatePage.tsx:144
+#: src/paths/instance/templates/create/CreatePage.tsx:199
#, c-format
msgid "Describe what this template stands for"
-msgstr ""
+msgstr "Décrire ce que ce modèle représente"
-#: src/paths/instance/templates/create/CreatePage.tsx:149
+#: src/paths/instance/templates/create/CreatePage.tsx:206
#, c-format
-msgid "Fixed summary"
+msgid "If specified, this template will create an order with the same summary"
msgstr ""
+"S'il est sélectionné, ce modèle créera une commande avec le même résumé."
-#: src/paths/instance/templates/create/CreatePage.tsx:150
+#: src/paths/instance/templates/create/CreatePage.tsx:210
#, c-format
-msgid "If specified, this template will create order with the same summary"
-msgstr ""
+msgid "Summary is editable"
+msgstr "Le résumé est éditable"
-#: src/paths/instance/templates/create/CreatePage.tsx:154
+#: src/paths/instance/templates/create/CreatePage.tsx:211
#, c-format
-msgid "Fixed price"
-msgstr ""
+msgid "Allow the user to change the summary."
+msgstr "Autoriser l'utilisateur à modifier le résumé."
-#: src/paths/instance/templates/create/CreatePage.tsx:155
+#: src/paths/instance/templates/create/CreatePage.tsx:217
#, c-format
-msgid "If specified, this template will create order with the same price"
-msgstr ""
+msgid "If specified, this template will create an order with the same price"
+msgstr "S'il est renseigné, ce modèle créera une commande avec le même prix"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:221
+#, c-format
+msgid "Amount is editable"
+msgstr "Le montant est modifiable"
-#: src/paths/instance/templates/create/CreatePage.tsx:159
+#: src/paths/instance/templates/create/CreatePage.tsx:222
+#, c-format
+msgid "Allow the user to select the amount to pay."
+msgstr "Permettre à l'utilisateur de sélectionner le montant à payer."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:229
+#, c-format
+msgid "Currency is editable"
+msgstr "La devise est modifiable"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:230
+#, c-format
+msgid "Allow the user to change currency."
+msgstr "Permettre à l'utilisateur de changer de devise."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:232
+#, c-format
+msgid "Supported currencies"
+msgstr "Devises prises en charge"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:233
+#, c-format
+msgid "Supported currencies: %1$s"
+msgstr "Devises prises en charge : %1$s"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:241
#, c-format
msgid "Minimum age"
-msgstr ""
+msgstr "Age minimum"
-#: src/paths/instance/templates/create/CreatePage.tsx:161
+#: src/paths/instance/templates/create/CreatePage.tsx:243
#, c-format
msgid "Is this contract restricted to some age?"
-msgstr ""
+msgstr "Ce contrat doit-il contenir une limite d'âge ?"
-#: src/paths/instance/templates/create/CreatePage.tsx:165
+#: src/paths/instance/templates/create/CreatePage.tsx:247
#, c-format
msgid "Payment timeout"
-msgstr ""
+msgstr "Délai de paiement"
-#: src/paths/instance/templates/create/CreatePage.tsx:167
+#: src/paths/instance/templates/create/CreatePage.tsx:249
#, c-format
msgid ""
-"How much time has the customer to complete the payment once the order was "
+"How much time the customer has to complete the payment once the order was "
"created."
msgstr ""
+"De combien de temps le client dispose-t-il pour effectuer le paiement une "
+"fois la commande créée ?"
-#: src/paths/instance/templates/create/CreatePage.tsx:171
+#: src/paths/instance/templates/create/CreatePage.tsx:254
#, c-format
-msgid "Verification algorithm"
-msgstr ""
+msgid "OTP device"
+msgstr "Appareil OTP"
-#: src/paths/instance/templates/create/CreatePage.tsx:172
+#: src/paths/instance/templates/create/CreatePage.tsx:255
#, c-format
-msgid "Algorithm to use to verify transaction in offline mode"
-msgstr ""
+msgid "Use to verify transaction while offline."
+msgstr "Permet de vérifier une transaction hors ligne."
-#: src/paths/instance/templates/create/CreatePage.tsx:180
+#: src/paths/instance/templates/create/CreatePage.tsx:257
#, c-format
-msgid "Point-of-sale key"
-msgstr ""
+msgid "No OTP device."
+msgstr "Aucun appareil OTP."
-#: src/paths/instance/templates/create/CreatePage.tsx:182
+#: src/paths/instance/templates/create/CreatePage.tsx:259
#, c-format
-msgid "Useful to validate the purchase"
-msgstr ""
+msgid "Add one first"
+msgstr "Ajouter un premier élément"
-#: src/paths/instance/templates/create/CreatePage.tsx:196
+#: src/paths/instance/templates/create/CreatePage.tsx:272
#, c-format
-msgid "generate random secret key"
-msgstr ""
+msgid "No device"
+msgstr "Aucun appareil"
-#: src/paths/instance/templates/create/CreatePage.tsx:203
+#: src/paths/instance/templates/create/CreatePage.tsx:276
#, c-format
-msgid "random"
-msgstr ""
+msgid "Use to verify transaction in offline mode."
+msgstr "A utiliser pour vérifier la transaction en mode hors ligne."
-#: src/paths/instance/templates/create/CreatePage.tsx:208
+#: src/paths/instance/templates/create/index.tsx:52
#, c-format
-msgid "show secret key"
-msgstr ""
+msgid "Template has been created"
+msgstr "Le modèle a été créé"
-#: src/paths/instance/templates/create/CreatePage.tsx:209
+#: src/paths/instance/templates/create/index.tsx:58
#, c-format
-msgid "hide secret key"
-msgstr ""
+msgid "Could not create template"
+msgstr "Impossible de créer le modèle"
-#: src/paths/instance/templates/create/CreatePage.tsx:216
+#: src/paths/instance/templates/list/Table.tsx:61
#, c-format
-msgid "hide"
-msgstr ""
+msgid "Templates"
+msgstr "Modèles"
-#: src/paths/instance/templates/create/CreatePage.tsx:218
+#: src/paths/instance/templates/list/Table.tsx:66
#, c-format
-msgid "show"
-msgstr ""
+msgid "Add new templates"
+msgstr "Ajouter de nouveaux modèles"
-#: src/paths/instance/templates/create/index.tsx:52
+#: src/paths/instance/templates/list/Table.tsx:127
#, c-format
-msgid "could not inform template"
-msgstr ""
+msgid "Load more templates before the first one"
+msgstr "Ajouter de nouveaux modèles avant le premier"
-#: src/paths/instance/templates/use/UsePage.tsx:54
+#: src/paths/instance/templates/list/Table.tsx:165
#, c-format
-msgid "Amount is required"
-msgstr ""
+msgid "Delete selected templates from the database"
+msgstr "Effacer les modèles sélectionnés de la base de données"
-#: src/paths/instance/templates/use/UsePage.tsx:58
+#: src/paths/instance/templates/list/Table.tsx:172
#, c-format
-msgid "Order summary is required"
-msgstr ""
+msgid "Use template to create new order"
+msgstr "Utiliser le modèle pour créer une nouvelle commande"
-#: src/paths/instance/templates/use/UsePage.tsx:86
+#: src/paths/instance/templates/list/Table.tsx:175
#, c-format
-msgid "New order for template"
-msgstr ""
+msgid "Use template"
+msgstr "Utiliser le modèle"
-#: src/paths/instance/templates/use/UsePage.tsx:108
+#: src/paths/instance/templates/list/Table.tsx:179
#, c-format
-msgid "Amount of the order"
-msgstr ""
+msgid "Create qr code for the template"
+msgstr "Créer le code QR pour le modèle"
-#: src/paths/instance/templates/use/UsePage.tsx:113
+#: src/paths/instance/templates/list/Table.tsx:194
#, c-format
-msgid "Order summary"
-msgstr ""
+msgid "Load more templates after the last one"
+msgstr "Ajouter des modèles après le dernier"
-#: src/paths/instance/templates/use/index.tsx:92
+#: src/paths/instance/templates/list/Table.tsx:214
#, c-format
-msgid "could not create order from template"
-msgstr ""
+msgid "There are no templates yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore de modèles, ajoutez-en en appuyant sur le signe +"
-#: src/paths/instance/templates/qr/QrPage.tsx:131
+#: src/paths/instance/templates/list/index.tsx:91
#, c-format
-msgid ""
-"Here you can specify a default value for fields that are not fixed. Default "
-"values can be edited by the customer before the payment."
-msgstr ""
+msgid "Jump to template with the given template ID"
+msgstr "Aller directement au modèle avec cet identifiant"
-#: src/paths/instance/templates/qr/QrPage.tsx:148
+#: src/paths/instance/templates/list/index.tsx:92
#, c-format
-msgid "Fixed amount"
-msgstr ""
+msgid "Template identification"
+msgstr "Identification du modèle"
-#: src/paths/instance/templates/qr/QrPage.tsx:149
+#: src/paths/instance/templates/list/index.tsx:132
#, c-format
-msgid "Default amount"
-msgstr ""
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
+msgstr "Le modèle \"%1$s\" (identifiant : %2$s) a été effacé"
+
+#: src/paths/instance/templates/list/index.tsx:137
+#, c-format
+msgid "Failed to delete template"
+msgstr "Impossible d'effacer le modèle"
-#: src/paths/instance/templates/qr/QrPage.tsx:161
+#: src/paths/instance/templates/list/index.tsx:153
#, c-format
-msgid "Default summary"
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
msgstr ""
+"Si vous effacez le modèle %1$s (identifiant : %2$s) vous pourriez perdre des "
+"informations"
+
+#: src/paths/instance/templates/list/index.tsx:160
+#, c-format
+msgid "Deleting an template"
+msgstr "Suppression d'un modèle"
-#: src/paths/instance/templates/qr/QrPage.tsx:177
+#: src/paths/instance/templates/list/index.tsx:162
+#, c-format
+msgid "can't be undone"
+msgstr "ne peut être annulé"
+
+#: src/paths/instance/templates/qr/QrPage.tsx:77
#, c-format
msgid "Print"
-msgstr ""
+msgstr "Imprimer"
-#: src/paths/instance/templates/qr/QrPage.tsx:184
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
#, c-format
-msgid "Setup TOTP"
-msgstr ""
+msgid "If specified, this template will create order with the same summary"
+msgstr "S'il est utilisé, ce modèle créera des commandes avec le même résumé."
-#: src/paths/instance/templates/list/Table.tsx:65
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
#, c-format
-msgid "Templates"
-msgstr ""
+msgid "If specified, this template will create orders with the same price"
+msgstr "S'il est utilisé, ce modèle créera des commandes avec le même prix."
-#: src/paths/instance/templates/list/Table.tsx:70
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
#, c-format
-msgid "add new templates"
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
msgstr ""
+"De combien de temps dispose le client pour effectuer le paiement une fois la "
+"commande créée ?"
-#: src/paths/instance/templates/list/Table.tsx:142
+#: src/paths/instance/templates/update/index.tsx:90
#, c-format
-msgid "load more templates before the first one"
-msgstr ""
+msgid "Template (ID: %1$s) has been updated"
+msgstr "Modèle (identifiant : %1$s) a été modifié"
-#: src/paths/instance/templates/list/Table.tsx:146
+#: src/paths/instance/templates/use/UsePage.tsx:58
#, c-format
-msgid "load newer templates"
-msgstr ""
+msgid "An amount is required"
+msgstr "Montant obligatoire"
-#: src/paths/instance/templates/list/Table.tsx:181
+#: src/paths/instance/templates/use/UsePage.tsx:60
#, c-format
-msgid "delete selected templates from the database"
-msgstr ""
+msgid "An order summary is required"
+msgstr "Un résumé de la commande est obligatoire"
-#: src/paths/instance/templates/list/Table.tsx:188
+#: src/paths/instance/templates/use/UsePage.tsx:88
#, c-format
-msgid "use template to create new order"
-msgstr ""
+msgid "New order from template"
+msgstr "Nouvelle commande à partir d'un modèle"
-#: src/paths/instance/templates/list/Table.tsx:195
+#: src/paths/instance/templates/use/UsePage.tsx:110
#, c-format
-msgid "create qr code for the template"
-msgstr ""
+msgid "Amount of the order"
+msgstr "Montant de la commande"
-#: src/paths/instance/templates/list/Table.tsx:210
+#: src/paths/instance/templates/use/UsePage.tsx:115
#, c-format
-msgid "load more templates after the last one"
-msgstr ""
+msgid "Order summary"
+msgstr "Résumé de la commande"
-#: src/paths/instance/templates/list/Table.tsx:214
+#: src/paths/instance/templates/use/index.tsx:125
#, c-format
-msgid "load older templates"
-msgstr ""
+msgid "Could not create order from template"
+msgstr "Impossible de créer une commande à partir du modèle"
-#: src/paths/instance/templates/list/Table.tsx:231
+#: src/paths/instance/token/DetailPage.tsx:57
#, c-format
-msgid "There is no templates yet, add more pressing the + sign"
-msgstr ""
+msgid "You need your access token to perform the operation"
+msgstr "Vous avez besoin de votre jeton d'accès pour effectuer l'opération"
-#: src/paths/instance/templates/list/index.tsx:104
+#: src/paths/instance/token/DetailPage.tsx:74
#, c-format
-msgid "template delete successfully"
+msgid "You are updating the access token from instance with id \"%1$s\""
msgstr ""
+"Vous modifiez le jeton d'accès de l'instance dont l'identifiant est \"%1$s\""
-#: src/paths/instance/templates/list/index.tsx:110
+#: src/paths/instance/token/DetailPage.tsx:105
#, c-format
-msgid "could not delete the template"
-msgstr ""
+msgid "This instance doesn't have authentication token."
+msgstr "Cette instance n'a pas de jeton d'authentification."
-#: src/paths/instance/templates/update/index.tsx:90
+#: src/paths/instance/token/DetailPage.tsx:106
#, c-format
-msgid "could not update template"
-msgstr ""
+msgid "You can leave it empty if there is another layer of security."
+msgstr "Vous pouvez le laisser vide s'il y a un autre niveau de sécurité."
-#: src/paths/instance/webhooks/create/CreatePage.tsx:57
+#: src/paths/instance/token/DetailPage.tsx:121
#, c-format
-msgid "should be one of '%1$s'"
-msgstr ""
+msgid "Current access token"
+msgstr "Jeton d'accès actuel"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#: src/paths/instance/token/DetailPage.tsx:126
#, c-format
-msgid "Webhook ID to use"
+msgid "Clearing the access token will mean public access to the instance."
msgstr ""
+"L'effacement du jeton d'accès signifie que l'instance est accessible à tous."
-#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#: src/paths/instance/token/DetailPage.tsx:142
#, c-format
-msgid "Event"
-msgstr ""
+msgid "Clear token"
+msgstr "Effacer le jeton"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:90
+#: src/paths/instance/token/DetailPage.tsx:177
#, c-format
-msgid "The event of the webhook: why the webhook is used"
-msgstr ""
+msgid "Confirm change"
+msgstr "Confirmer le changement"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:94
+#: src/paths/instance/token/index.tsx:83
#, c-format
-msgid "Method"
-msgstr ""
+msgid "Failed to clear token"
+msgstr "Echec de la suppression du jeton"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#: src/paths/instance/token/index.tsx:109
#, c-format
-msgid "Method used by the webhook"
-msgstr ""
+msgid "Failed to set new token"
+msgstr "Échec de la création d'un nouveau jeton"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
#, c-format
-msgid "URL"
-msgstr ""
+msgid "Slug"
+msgstr "Type"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:100
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
#, c-format
-msgid "URL of the webhook where the customer will be redirected"
+msgid "Token family slug to use in URLs (for internal use only)"
msgstr ""
+"Type de famille de jetons à utiliser dans les URL (à usage interne "
+"uniquement)"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
#, c-format
-msgid "Header"
-msgstr ""
+msgid "Kind"
+msgstr "Type"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:106
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
#, c-format
-msgid "Header template of the webhook"
-msgstr ""
+msgid "Token family kind"
+msgstr "Type de famille de jeton"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:111
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
#, c-format
-msgid "Body"
-msgstr ""
+msgid "User-readable token family name"
+msgstr "Nom de famille du jeton compréhensible par l'utilisateur"
-#: src/paths/instance/webhooks/create/CreatePage.tsx:112
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
#, c-format
-msgid "Body template by the webhook"
-msgstr ""
+msgid "Token family description for customers"
+msgstr "Description de la famille de jetons pour les clients"
-#: src/paths/instance/webhooks/list/Table.tsx:61
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
#, c-format
-msgid "Webhooks"
-msgstr ""
+msgid "Valid After"
+msgstr "Valide à partir de"
-#: src/paths/instance/webhooks/list/Table.tsx:66
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
#, c-format
-msgid "add new webhooks"
-msgstr ""
+msgid "Token family can issue tokens after this date"
+msgstr "La famille de jetons peut émettre des jetons après cette date."
-#: src/paths/instance/webhooks/list/Table.tsx:137
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
#, c-format
-msgid "load more webhooks before the first one"
-msgstr ""
+msgid "Valid Before"
+msgstr "Valide jusqu'à"
-#: src/paths/instance/webhooks/list/Table.tsx:141
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
#, c-format
-msgid "load newer webhooks"
-msgstr ""
+msgid "Token family can issue tokens until this date"
+msgstr "La famille de jetons peut émettre des jetons jusqu'à cette date"
-#: src/paths/instance/webhooks/list/Table.tsx:151
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
#, c-format
-msgid "Event type"
-msgstr ""
+msgid "Duration"
+msgstr "Durée"
-#: src/paths/instance/webhooks/list/Table.tsx:176
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
#, c-format
-msgid "delete selected webhook from the database"
-msgstr ""
+msgid "Validity duration of a issued token"
+msgstr "Durée de validité d'un jeton émis"
-#: src/paths/instance/webhooks/list/Table.tsx:198
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
#, c-format
-msgid "load more webhooks after the last one"
-msgstr ""
+msgid "Token familty created successfully"
+msgstr "Création réussie de la famille de jetons"
-#: src/paths/instance/webhooks/list/Table.tsx:202
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
#, c-format
-msgid "load older webhooks"
-msgstr ""
+msgid "Could not create token family"
+msgstr "Impossible de créer la famille de jetons"
-#: src/paths/instance/webhooks/list/Table.tsx:219
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
#, c-format
-msgid "There is no webhooks yet, add more pressing the + sign"
-msgstr ""
+msgid "Token Families"
+msgstr "Familles de jetons"
-#: src/paths/instance/webhooks/list/index.tsx:94
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
#, c-format
-msgid "webhook delete successfully"
-msgstr ""
+msgid "Add token family"
+msgstr "Ajouter une famille de jetons"
-#: src/paths/instance/webhooks/list/index.tsx:100
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
#, c-format
-msgid "could not delete the webhook"
-msgstr ""
+msgid "Go to token family update page"
+msgstr "Aller à la page de modification des familles de jetons"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
+#, c-format
+msgid "Remove this token family from the database"
+msgstr "Effacer cette famille de jetons de la base de données"
-#: src/paths/instance/transfers/create/CreatePage.tsx:63
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
#, c-format
-msgid "check the id, does not look valid"
+msgid ""
+"There are no token families yet, add the first one by pressing the + sign."
msgstr ""
+"Il n'y a pas encore de familles de jetons, ajoutez la première en appuyant "
+"sur le signe +."
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
+#, c-format
+msgid "Token family updated successfully"
+msgstr "Modification réussie de la famille de jetons"
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
+#, c-format
+msgid "Could not update the token family"
+msgstr "Modification de la famille de jetons impossible"
-#: src/paths/instance/transfers/create/CreatePage.tsx:65
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
#, c-format
-msgid "should have 52 characters, current %1$s"
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
+msgstr "Famille de jetons \"%1$s\" (type : %2$s) a été effacée"
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
+#, c-format
+msgid "Failed to delete token family"
+msgstr "Échec de la suppression de la famille de jetons"
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
+#, c-format
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
msgstr ""
+"Si vous supprimez la famille de jetons %1$s ( Catégorie : %2$s), tous les "
+"jetons émis deviendront invalides."
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
+#, c-format
+msgid "Deleting a token family %1$s ."
+msgstr "Suppression de la famille de jetons %1$s ."
+
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
+#, c-format
+msgid "Token Family: %1$s"
+msgstr "Famille de jetons : %1$s"
-#: src/paths/instance/transfers/create/CreatePage.tsx:72
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
+#, c-format
+msgid "Could not update token family"
+msgstr "Impossible de mettre à jour la famille de jetons"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
+#, c-format
+msgid "Check the id, does not look valid"
+msgstr "Vérifiez l'identifiant, il ne semble pas valide"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
+#, c-format
+msgid "Must have 52 characters, current %1$s"
+msgstr "Doit contenir 52 caractères, actuellement %1$s"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
#, c-format
msgid "URL doesn't have the right format"
-msgstr ""
+msgstr "L'URL n'a pas le format correct"
-#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
#, c-format
msgid "Credited bank account"
-msgstr ""
+msgstr "Compte bancaire crédité"
-#: src/paths/instance/transfers/create/CreatePage.tsx:100
-#, c-format
-msgid "Select one account"
-msgstr ""
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
+#, fuzzy, c-format
+msgid "Select an account"
+msgstr "Compte en banque."
-#: src/paths/instance/transfers/create/CreatePage.tsx:101
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
#, c-format
msgid "Bank account of the merchant where the payment was received"
-msgstr ""
+msgstr "Compte bancaire du commerçant où le paiement a été reçu"
-#: src/paths/instance/transfers/create/CreatePage.tsx:105
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
#, c-format
msgid "Wire transfer ID"
-msgstr ""
+msgstr "Identifiant du virement bancaire"
-#: src/paths/instance/transfers/create/CreatePage.tsx:107
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
#, c-format
msgid ""
-"unique identifier of the wire transfer used by the exchange, must be 52 "
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
"characters long"
msgstr ""
+"Identifiant du virement utilisé par l'exchange, doit être composé de 52 "
+"caractères"
-#: src/paths/instance/transfers/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
+#, c-format
+msgid "Exchange URL"
+msgstr "URL de l'exchange"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
#, c-format
msgid ""
"Base URL of the exchange that made the transfer, should have been in the "
"wire transfer subject"
msgstr ""
+"L'URL de base de l'exchange qui a effectué le transfert aurait dû figurer "
+"dans l'objet du virement"
-#: src/paths/instance/transfers/create/CreatePage.tsx:117
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
#, c-format
msgid "Amount credited"
-msgstr ""
+msgstr "Montant crédité"
-#: src/paths/instance/transfers/create/CreatePage.tsx:118
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
#, c-format
msgid "Actual amount that was wired to the merchant's bank account"
-msgstr ""
+msgstr "Montant réel viré sur le compte bancaire du commerçant"
-#: src/paths/instance/transfers/create/index.tsx:58
+#: src/paths/instance/transfers/create/index.tsx:62
#, c-format
-msgid "could not inform transfer"
-msgstr ""
+msgid "Wire transfer informed successfully"
+msgstr "Virement bancaire informé avec succès"
-#: src/paths/instance/transfers/list/Table.tsx:61
+#: src/paths/instance/transfers/create/index.tsx:68
#, c-format
-msgid "Transfers"
-msgstr ""
+msgid "Could not inform transfer"
+msgstr "Impossible d'informer le virement"
-#: src/paths/instance/transfers/list/Table.tsx:66
+#: src/paths/instance/transfers/list/Table.tsx:62
#, c-format
-msgid "add new transfer"
-msgstr ""
+msgid "Transfers"
+msgstr "Virements"
-#: src/paths/instance/transfers/list/Table.tsx:129
+#: src/paths/instance/transfers/list/Table.tsx:67
#, c-format
-msgid "load more transfers before the first one"
-msgstr ""
+msgid "Add new transfer"
+msgstr "Ajouter un nouveau virement"
-#: src/paths/instance/transfers/list/Table.tsx:133
+#: src/paths/instance/transfers/list/Table.tsx:120
#, c-format
-msgid "load newer transfers"
-msgstr ""
+msgid "Load more transfers before the first one"
+msgstr "Ajouter des virements avant le premier"
-#: src/paths/instance/transfers/list/Table.tsx:143
+#: src/paths/instance/transfers/list/Table.tsx:133
#, c-format
msgid "Credit"
-msgstr ""
+msgstr "Crédit"
-#: src/paths/instance/transfers/list/Table.tsx:152
+#: src/paths/instance/transfers/list/Table.tsx:136
#, c-format
msgid "Confirmed"
-msgstr ""
+msgstr "Confirmé"
-#: src/paths/instance/transfers/list/Table.tsx:155
+#: src/paths/instance/transfers/list/Table.tsx:139
#, c-format
msgid "Verified"
-msgstr ""
+msgstr "Vérifié"
-#: src/paths/instance/transfers/list/Table.tsx:158
+#: src/paths/instance/transfers/list/Table.tsx:142
#, c-format
-msgid "Executed at"
-msgstr ""
+msgid "Executed on"
+msgstr "Exécuté le"
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
msgid "yes"
-msgstr ""
+msgstr "oui"
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
msgid "no"
-msgstr ""
+msgstr "non"
+
+#: src/paths/instance/transfers/list/Table.tsx:158
+#, c-format
+msgid "never"
+msgstr "jamais"
-#: src/paths/instance/transfers/list/Table.tsx:181
+#: src/paths/instance/transfers/list/Table.tsx:163
#, c-format
msgid "unknown"
-msgstr ""
+msgstr "inconnu"
-#: src/paths/instance/transfers/list/Table.tsx:187
+#: src/paths/instance/transfers/list/Table.tsx:169
#, c-format
-msgid "delete selected transfer from the database"
-msgstr ""
+msgid "Delete selected transfer from the database"
+msgstr "Effacer le virement de la base de données"
-#: src/paths/instance/transfers/list/Table.tsx:202
+#: src/paths/instance/transfers/list/Table.tsx:184
#, c-format
-msgid "load more transfer after the last one"
-msgstr ""
+msgid "Load more transfers after the last one"
+msgstr "Ajouter des virements après le dernier"
-#: src/paths/instance/transfers/list/Table.tsx:206
+#: src/paths/instance/transfers/list/Table.tsx:204
#, c-format
-msgid "load older transfers"
-msgstr ""
+msgid "There are no transfers yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore de virements, ajoutez-en en appuyant sur le signe +"
-#: src/paths/instance/transfers/list/Table.tsx:223
+#: src/paths/instance/transfers/list/ListPage.tsx:83
#, c-format
-msgid "There is no transfer yet, add more pressing the + sign"
-msgstr ""
+msgid "All accounts"
+msgstr "Tous les comptes"
-#: src/paths/instance/transfers/list/ListPage.tsx:79
+#: src/paths/instance/transfers/list/ListPage.tsx:84
#, c-format
-msgid "filter by account address"
-msgstr ""
+msgid "Filter by account address"
+msgstr "Filtre sur l'adresse du compte"
-#: src/paths/instance/transfers/list/ListPage.tsx:100
+#: src/paths/instance/transfers/list/ListPage.tsx:105
#, c-format
-msgid "only show wire transfers confirmed by the merchant"
-msgstr ""
+msgid "Only show wire transfers confirmed by the merchant"
+msgstr "Afficher uniquement les virements bancaires confirmés par le commerçant"
-#: src/paths/instance/transfers/list/ListPage.tsx:110
+#: src/paths/instance/transfers/list/ListPage.tsx:115
#, c-format
-msgid "only show wire transfers claimed by the exchange"
-msgstr ""
+msgid "Only show wire transfers claimed by the exchange"
+msgstr "N'afficher que les virements bancaires réclamés par l'exchange"
-#: src/paths/instance/transfers/list/ListPage.tsx:113
+#: src/paths/instance/transfers/list/ListPage.tsx:118
#, c-format
msgid "Unverified"
-msgstr ""
+msgstr "Non vérifié"
-#: src/paths/admin/create/CreatePage.tsx:69
+#: src/paths/instance/transfers/list/index.tsx:118
#, c-format
-msgid "is not valid"
-msgstr ""
+msgid "Wire transfer \"%1$s...\" has been deleted"
+msgstr "Le virement bancaire \"%1$s\" a été effacé"
-#: src/paths/admin/create/CreatePage.tsx:94
+#: src/paths/instance/transfers/list/index.tsx:123
#, c-format
-msgid "is not a number"
-msgstr ""
+msgid "Failed to delete transfer"
+msgstr "Échec de la suppression du virement"
-#: src/paths/admin/create/CreatePage.tsx:96
+#: src/paths/admin/create/CreatePage.tsx:86
#, c-format
-msgid "must be 1 or greater"
-msgstr ""
+msgid "Must be business or individual"
+msgstr "Il doit s'agir d'une entreprise ou d'un particulier"
-#: src/paths/admin/create/CreatePage.tsx:107
+#: src/paths/admin/create/CreatePage.tsx:104
#, c-format
-msgid "max 7 lines"
-msgstr ""
+msgid "Pay delay can't be greater than wire transfer delay"
+msgstr "Le délai de paiement ne peut être supérieur au délai de virement"
+
+#: src/paths/admin/create/CreatePage.tsx:112
+#, c-format
+msgid "Max 7 lines"
+msgstr "7 lignes maximum"
+
+#: src/paths/admin/create/CreatePage.tsx:138
+#, c-format
+msgid "Doesn't match"
+msgstr "Ne correspond pas"
+
+#: src/paths/admin/create/CreatePage.tsx:215
+#, c-format
+msgid "Enable access control"
+msgstr "Activer le contrôle d'accès"
-#: src/paths/admin/create/CreatePage.tsx:178
+#: src/paths/admin/create/CreatePage.tsx:216
#, c-format
-msgid "change authorization configuration"
+msgid "Choose if the backend server should authenticate access."
+msgstr "Choisissez si le serveur backend doit authentifier l'accès."
+
+#: src/paths/admin/create/CreatePage.tsx:243
+#, c-format
+msgid "Access control is not yet decided. This instance can't be created."
msgstr ""
+"Le contrôle d'accès n'est pas encore défini. Cette instance ne peut pas être "
+"créée."
+
+#: src/paths/admin/create/CreatePage.tsx:250
+#, c-format
+msgid "Authorization must be handled externally."
+msgstr "L'autorisation doit être gérée en externe."
+
+#: src/paths/admin/create/CreatePage.tsx:256
+#, c-format
+msgid "Authorization is handled by the backend server."
+msgstr "L'autorisation doit être gérée par le serveur backend."
-#: src/paths/admin/create/CreatePage.tsx:217
+#: src/paths/admin/create/CreatePage.tsx:274
#, c-format
msgid "Need to complete marked fields and choose authorization method"
-msgstr ""
+msgstr "Il faut remplir les champs marqués et choisir la méthode d'autorisation"
-#: src/components/form/InputPaytoForm.tsx:82
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
#, c-format
-msgid "This is not a valid bitcoin address."
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
msgstr ""
+"Nom de l'instance dans les URL. L'instance 'default' est particulière en ce "
+"sens qu'elle est utilisée pour administrer les autres instances."
-#: src/components/form/InputPaytoForm.tsx:95
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "This is not a valid Ethereum address."
-msgstr ""
+msgid "Business name"
+msgstr "Nom de l'entreprise"
-#: src/components/form/InputPaytoForm.tsx:118
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
#, c-format
-msgid "IBAN numbers usually have more that 4 digits"
-msgstr ""
+msgid "Legal name of the business represented by this instance."
+msgstr "Nom légal de l'entreprise représentée par cette instance."
-#: src/components/form/InputPaytoForm.tsx:120
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
#, c-format
-msgid "IBAN numbers usually have less that 34 digits"
-msgstr ""
+msgid "Email"
+msgstr "Email"
-#: src/components/form/InputPaytoForm.tsx:128
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
#, c-format
-msgid "IBAN country code not found"
-msgstr ""
+msgid "Contact email"
+msgstr "Email de contact"
-#: src/components/form/InputPaytoForm.tsx:153
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
#, c-format
-msgid "IBAN number is not valid, checksum is wrong"
-msgstr ""
+msgid "Website URL"
+msgstr "URL du site web"
-#: src/components/form/InputPaytoForm.tsx:248
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
#, c-format
-msgid "Target type"
-msgstr ""
+msgid "URL."
+msgstr "URL."
-#: src/components/form/InputPaytoForm.tsx:249
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
#, c-format
-msgid "Method to use for wire transfer"
-msgstr ""
+msgid "Logo"
+msgstr "Logo"
-#: src/components/form/InputPaytoForm.tsx:258
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
#, c-format
-msgid "Routing"
-msgstr ""
+msgid "Logo image."
+msgstr "Image du Logo."
-#: src/components/form/InputPaytoForm.tsx:259
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
#, c-format
-msgid "Routing number."
-msgstr ""
+msgid "Physical location of the merchant."
+msgstr "Localisation physique du commerçant."
-#: src/components/form/InputPaytoForm.tsx:263
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
#, c-format
-msgid "Account"
+msgid "Jurisdiction"
+msgstr "Juridiction"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#, c-format
+msgid "Jurisdiction for legal disputes with the merchant."
+msgstr "Juridiction compétente pour les litiges avec le commerçant."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#, c-format
+msgid "Pay transaction fee"
+msgstr "Payer les frais de transaction"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
+#, c-format
+msgid "Assume the cost of the transaction of let the user pay for it."
msgstr ""
+"Prendre en charge le coût de la transaction ou laisser l'utilisateur payer."
-#: src/components/form/InputPaytoForm.tsx:264
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
#, c-format
-msgid "Account number."
+msgid "Default payment delay"
+msgstr "Délai de paiement par défaut"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
+#, c-format
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
msgstr ""
+"Temps par défaut qu'ont les clients pour payer une commande avant que celle "
+"ci n'expire."
-#: src/components/form/InputPaytoForm.tsx:273
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
#, c-format
-msgid "Business Identifier Code."
+msgid "Default wire transfer delay"
+msgstr "Délai par défaut pour les virements bancaires"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#, c-format
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
msgstr ""
+"Durée maximale pendant laquelle un exchange est autorisé à retarder le "
+"transfert de fonds au commerçant, ce qui lui permet de regrouper les petits "
+"paiements en virements plus importants et de réduire les frais de virement."
-#: src/components/form/InputPaytoForm.tsx:282
+#: src/paths/instance/update/UpdatePage.tsx:124
+#, c-format
+msgid "Instance id"
+msgstr "Identifiant d'instance"
+
+#: src/paths/instance/update/index.tsx:108
+#, c-format
+msgid "Failed to update instance"
+msgstr "Echec de la modification de l'instance"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
+#, c-format
+msgid "Must be \"pay\" or \"refund\""
+msgstr "Doit être \"payer\" ou \"rembourser\""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
+#, c-format
+msgid "Must be one of '%1$s'"
+msgstr "Doit être l'un des éléments suivants '%1$s'"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
#, c-format
-msgid "Bank Account Number."
+msgid "Webhook ID to use"
+msgstr "Identifiant du Webhook à utiliser"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#, c-format
+msgid "Event"
+msgstr "Evènement"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
+#, c-format
+msgid "Pay"
+msgstr "Payer"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#, c-format
+msgid "The event of the webhook: why the webhook is used"
+msgstr "L'événement du webhook : pourquoi le webhook est-il utilisé"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#, c-format
+msgid "Method"
+msgstr "Méthode"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
+#, c-format
+msgid "GET"
+msgstr "GET"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
+#, c-format
+msgid "POST"
+msgstr "POST"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
+#, c-format
+msgid "PUT"
+msgstr "PUT"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#, c-format
+msgid "PATCH"
+msgstr "PATCH"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
+#, c-format
+msgid "HEAD"
+msgstr "HEAD"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
+#, c-format
+msgid "Method used by the webhook"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:292
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
#, c-format
-msgid "Unified Payment Interface."
+msgid "URL"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:301
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
#, c-format
-msgid "Bitcoin protocol."
+msgid "URL of the webhook where the customer will be redirected"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:310
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
#, c-format
-msgid "Ethereum protocol."
+msgid ""
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:319
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
#, c-format
-msgid "Interledger protocol."
+msgid "For example %1$s will be replaced with the the order's price"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:328
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
#, c-format
-msgid "Host"
+msgid "The short list of variables are:"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:329
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
#, c-format
-msgid "Bank host."
+msgid "order's description"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:334
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
#, c-format
-msgid "Bank account."
+msgid "order's price"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:343
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
#, c-format
-msgid "Bank account owner's name."
+msgid "order's unique identification"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:370
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
#, c-format
-msgid "No accounts yet."
+msgid "the amount that was being refunded"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:52
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
#, c-format
-msgid ""
-"Name of the instance in URLs. The 'default' instance is special in that it "
-"is used to administer other instances."
+msgid "the reason entered by the merchant staff for granting the refund"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:58
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
#, c-format
-msgid "Business name"
+msgid "time of the refund in nanoseconds since 1970"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
#, c-format
-msgid "Legal name of the business represented by this instance."
+msgid "Http body"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:64
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
#, c-format
-msgid "Email"
+msgid "Body template by the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:65
+#: src/paths/instance/webhooks/create/index.tsx:52
#, c-format
-msgid "Contact email"
+msgid "Webhook create successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:70
+#: src/paths/instance/webhooks/create/index.tsx:58
#, c-format
-msgid "Website URL"
+msgid "Could not create the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:71
+#: src/paths/instance/webhooks/create/index.tsx:66
#, c-format
-msgid "URL."
+msgid "Could not create webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:76
+#: src/paths/instance/webhooks/list/Table.tsx:57
#, c-format
-msgid "Logo"
+msgid "Webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:77
+#: src/paths/instance/webhooks/list/Table.tsx:62
#, c-format
-msgid "Logo image."
+msgid "Add new webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:82
+#: src/paths/instance/webhooks/list/Table.tsx:117
#, c-format
-msgid "Bank account"
+msgid "Load more webhooks before the first one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:83
+#: src/paths/instance/webhooks/list/Table.tsx:130
#, c-format
-msgid "URI specifying bank account for crediting revenue."
+msgid "Event type"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:88
+#: src/paths/instance/webhooks/list/Table.tsx:155
#, c-format
-msgid "Default max deposit fee"
+msgid "Delete selected webhook from the database"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:89
+#: src/paths/instance/webhooks/list/Table.tsx:170
#, c-format
-msgid ""
-"Maximum deposit fees this merchant is willing to pay per order by default."
+msgid "Load more webhooks after the last one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#: src/paths/instance/webhooks/list/Table.tsx:190
+#, fuzzy, c-format
+msgid "There are no webhooks yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore d'instances, ajoutez-en en appuyant sur le signe +"
+
+#: src/paths/instance/webhooks/list/index.tsx:88
#, c-format
-msgid "Default max wire fee"
+msgid "Webhook delete successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:95
+#: src/paths/instance/webhooks/list/index.tsx:93
#, c-format
-msgid ""
-"Maximum wire fees this merchant is willing to pay per wire transfer by "
-"default."
+msgid "Could not delete the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:100
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
#, c-format
-msgid "Default wire fee amortization"
+msgid "Header"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
#, c-format
-msgid ""
-"Number of orders excess wire transfer fees will be divided by to compute per "
-"order surcharge."
+msgid "Header template of the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
#, c-format
-msgid "Physical location of the merchant."
+msgid "Body"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#: src/paths/instance/webhooks/update/index.tsx:88
#, c-format
-msgid "Jurisdiction"
+msgid "Webhook updated"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#: src/paths/instance/webhooks/update/index.tsx:94
#, c-format
-msgid "Jurisdiction for legal disputes with the merchant."
+msgid "Could not update webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:122
+#: src/paths/settings/index.tsx:73
#, c-format
-msgid "Default payment delay"
+msgid "Language"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:124
+#: src/paths/settings/index.tsx:89
#, c-format
-msgid ""
-"Time customers have to pay an order before the offer expires by default."
+msgid "Advance order creation"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:129
+#: src/paths/settings/index.tsx:90
#, c-format
-msgid "Default wire transfer delay"
+msgid "Shows more options in the order creation form"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:130
+#: src/paths/settings/index.tsx:94
#, c-format
-msgid ""
-"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
-"enabling it to aggregate smaller payments into larger wire transfers and "
-"reducing wire fees."
+msgid "Advance instance settings"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:164
+#: src/paths/settings/index.tsx:95
#, c-format
-msgid "Instance id"
+msgid "Shows more options in the instance settings form"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:173
+#: src/paths/settings/index.tsx:100
#, c-format
-msgid "Change the authorization method use for this instance."
+msgid "Date format"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:182
+#: src/paths/settings/index.tsx:118
#, c-format
-msgid "Manage access token"
+msgid "How the date is going to be displayed"
msgstr ""
-#: src/paths/instance/update/index.tsx:112
+#: src/paths/settings/index.tsx:121
#, c-format
-msgid "Failed to create instance"
+msgid "Developer mode"
msgstr ""
-#: src/components/exception/login.tsx:74
+#: src/paths/settings/index.tsx:122
#, c-format
-msgid "Login required"
+msgid ""
+"Shows more options and tools which are not intended for general audience."
msgstr ""
-#: src/components/exception/login.tsx:80
+#: src/paths/instance/categories/list/Table.tsx:133
#, c-format
-msgid "Please enter your access token."
+msgid "Total products"
msgstr ""
-#: src/components/exception/login.tsx:108
+#: src/paths/instance/categories/list/Table.tsx:164
#, c-format
-msgid "Access Token"
+msgid "Delete selected category from the database"
msgstr ""
-#: src/InstanceRoutes.tsx:171
+#: src/paths/instance/categories/list/Table.tsx:199
+#, fuzzy, c-format
+msgid "There are no categories yet, add more pressing the + sign"
+msgstr "Il n'y a pas encore d'instances, ajoutez-en en appuyant sur le signe +"
+
+#: src/paths/instance/categories/list/index.tsx:90
#, c-format
-msgid "The request to the backend take too long and was cancelled"
+msgid "Category delete successfully"
msgstr ""
-#: src/InstanceRoutes.tsx:172
+#: src/paths/instance/categories/list/index.tsx:95
#, c-format
-msgid "Diagnostic from %1$s is \"%2$s\""
+msgid "Could not delete the category"
msgstr ""
-#: src/InstanceRoutes.tsx:178
+#: src/paths/instance/categories/create/CreatePage.tsx:75
#, c-format
-msgid "The backend reported a problem: HTTP status #%1$s"
+msgid "Category name"
msgstr ""
-#: src/InstanceRoutes.tsx:179
+#: src/paths/instance/categories/create/index.tsx:53
#, c-format
-msgid "Diagnostic from %1$s is '%2$s'"
+msgid "Category added successfully"
msgstr ""
-#: src/InstanceRoutes.tsx:196
+#: src/paths/instance/categories/create/index.tsx:59
#, c-format
-msgid "Access denied"
+msgid "Could not add category"
msgstr ""
-#: src/InstanceRoutes.tsx:197
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
#, c-format
-msgid "The access token provided is invalid."
+msgid "Id:"
msgstr ""
-#: src/InstanceRoutes.tsx:212
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
#, c-format
-msgid "No 'default' instance configured yet."
+msgid "Name of the category"
msgstr ""
-#: src/InstanceRoutes.tsx:213
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
#, c-format
-msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgid "Products"
msgstr ""
-#: src/InstanceRoutes.tsx:630
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
#, c-format
-msgid "The access token provided is invalid"
+msgid "Search by product description or id"
msgstr ""
-#: src/InstanceRoutes.tsx:664
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
#, c-format
-msgid "Hide for today"
+msgid "Products that this category will list."
msgstr ""
-#: src/components/menu/SideBar.tsx:82
+#: src/paths/instance/categories/update/index.tsx:93
#, c-format
-msgid "Instance"
+msgid "Could not update category"
msgstr ""
-#: src/components/menu/SideBar.tsx:91
+#: src/paths/instance/categories/update/index.tsx:95
#, c-format
-msgid "Settings"
+msgid "Category id is unknown"
msgstr ""
-#: src/components/menu/SideBar.tsx:167
+#: src/Routing.tsx:665
#, c-format
-msgid "Connection"
+msgid "Without this the merchant backend will refuse to create new orders."
msgstr ""
-#: src/components/menu/SideBar.tsx:209
+#: src/Routing.tsx:675
#, c-format
-msgid "New"
+msgid "Hide for today"
msgstr ""
-#: src/components/menu/SideBar.tsx:219
+#: src/Routing.tsx:711
#, c-format
-msgid "List"
+msgid "KYC verification needed"
msgstr ""
-#: src/components/menu/SideBar.tsx:234
+#: src/Routing.tsx:715
#, c-format
-msgid "Log out"
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:71
+#: src/components/menu/SideBar.tsx:167
+#, fuzzy, c-format
+msgid "Configuration"
+msgstr "Confirmer"
+
+#: src/components/menu/SideBar.tsx:206
#, c-format
-msgid "Check your token is valid"
+msgid "Settings"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:90
+#: src/components/menu/SideBar.tsx:216
#, c-format
-msgid "Couldn't access the server."
+msgid "Access token"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:91
+#: src/components/menu/SideBar.tsx:224
#, c-format
-msgid "Could not infer instance id from url %1$s"
+msgid "Connection"
msgstr ""
-#: src/Application.tsx:104
+#: src/components/menu/SideBar.tsx:233
#, c-format
-msgid "Server not found"
+msgid "Interface"
msgstr ""
-#: src/Application.tsx:118
+#: src/components/menu/SideBar.tsx:274
#, c-format
-msgid "Server response with an error code"
+msgid "List"
msgstr ""
-#: src/Application.tsx:120
+#: src/components/menu/SideBar.tsx:293
#, c-format
-msgid "Got message %1$s from %2$s"
+msgid "Log out"
msgstr ""
-#: src/Application.tsx:131
+#: src/paths/admin/create/index.tsx:54
#, c-format
-msgid "Response from server is unreadable, http status: %1$s"
+msgid "Failed to create instance"
msgstr ""
-#: src/Application.tsx:144
+#: src/Application.tsx:208
#, c-format
-msgid "Unexpected Error"
+msgid "checking compatibility with server..."
msgstr ""
-#: src/components/form/InputArray.tsx:101
+#: src/Application.tsx:217
#, c-format
-msgid "The value %1$s is invalid for a payment url"
+msgid "Contacting the server failed"
msgstr ""
-#: src/components/form/InputArray.tsx:110
+#: src/Application.tsx:229
#, c-format
-msgid "add element to the list"
+msgid "The server version is not supported"
msgstr ""
-#: src/components/form/InputArray.tsx:112
+#: src/Application.tsx:230
#, c-format
-msgid "add"
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
msgstr ""
#: src/components/form/InputSecured.tsx:37
@@ -2731,12 +3813,26 @@ msgstr ""
msgid "Changing"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:87
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr ""
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, c-format
+msgid "Business Name"
+msgstr ""
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
#, c-format
msgid "Order ID"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:101
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
#, c-format
msgid "Payment URL"
msgstr ""
+
+#, c-format
+#~ msgid "With authentication"
+#~ msgstr "Avec authentification"
diff --git a/packages/merchant-backoffice-ui/src/i18n/it.po b/packages/merchant-backoffice-ui/src/i18n/it.po
index 4055af10e..5db925835 100644
--- a/packages/merchant-backoffice-ui/src/i18n/it.po
+++ b/packages/merchant-backoffice-ui/src/i18n/it.po
@@ -17,8 +17,8 @@ msgstr ""
"Project-Id-Version: Taler Wallet\n"
"Report-Msgid-Bugs-To: taler@gnu.org\n"
"POT-Creation-Date: 2016-11-23 00:00+0100\n"
-"PO-Revision-Date: 2023-08-16 12:43+0000\n"
-"Last-Translator: Krystian Baran <kiszkot@murena.io>\n"
+"PO-Revision-Date: 2024-10-27 11:02+0000\n"
+"Last-Translator: Stefan Kügel <stefan.kuegel@taler.net>\n"
"Language-Team: Italian <https://weblate.taler.net/projects/gnu-taler/"
"merchant-backoffice/it/>\n"
"Language: it\n"
@@ -26,156 +26,447 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.13.1\n"
+"X-Generator: Weblate 5.5.5\n"
-#: src/components/modal/index.tsx:71
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr ""
+
+#: src/components/modal/index.tsx:81
#, c-format
msgid "Cancel"
msgstr ""
-#: src/components/modal/index.tsx:79
+#: src/components/modal/index.tsx:89
#, c-format
msgid "%1$s"
msgstr ""
-#: src/components/modal/index.tsx:84
+#: src/components/modal/index.tsx:94
#, c-format
msgid "Close"
msgstr ""
-#: src/components/modal/index.tsx:124
+#: src/components/modal/index.tsx:134
#, c-format
msgid "Continue"
msgstr ""
-#: src/components/modal/index.tsx:178
+#: src/components/modal/index.tsx:194
#, c-format
msgid "Clear"
msgstr ""
-#: src/components/modal/index.tsx:190
+#: src/components/modal/index.tsx:206
#, c-format
msgid "Confirm"
+msgstr "Confermare"
+
+#: src/components/modal/index.tsx:248
+#, c-format
+msgid "Required"
+msgstr "Obbligatorio"
+
+#: src/components/modal/index.tsx:250
+#, c-format
+msgid "Letter must be a JSON string"
+msgstr ""
+
+#: src/components/modal/index.tsx:252
+#, c-format
+msgid "JSON string is invalid"
+msgstr ""
+
+#: src/components/modal/index.tsx:257
+#, c-format
+msgid "Import"
+msgstr ""
+
+#: src/components/modal/index.tsx:258
+#, c-format
+msgid "Importing an account from the bank"
+msgstr ""
+
+#: src/components/modal/index.tsx:265
+#, c-format
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
+msgstr ""
+
+#: src/components/modal/index.tsx:273
+#, c-format
+msgid "Account information"
+msgstr ""
+
+#: src/components/modal/index.tsx:338
+#, c-format
+msgid "Correct form"
+msgstr ""
+
+#: src/components/modal/index.tsx:339
+#, c-format
+msgid "Comparing account details"
+msgstr ""
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr ""
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr ""
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr ""
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr ""
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr ""
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr ""
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr ""
+
+#: src/components/modal/index.tsx:402
+#, fuzzy, c-format
+msgid "Account id"
+msgstr "Importo"
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr ""
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr ""
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
+msgstr ""
+
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr ""
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr ""
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr ""
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
+msgstr ""
+
+#: src/components/modal/index.tsx:487
+#, c-format
+msgid "Step 1:"
+msgstr ""
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
+msgstr ""
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr "Soggetto"
+
+#: src/components/modal/index.tsx:499
+#, c-format
+msgid "Step 2:"
+msgstr ""
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
+msgstr ""
+
+#: src/components/modal/index.tsx:509
+#, c-format
+msgid "Receiver name"
+msgstr ""
+
+#: src/components/modal/index.tsx:514
+#, c-format
+msgid "Step 3:"
msgstr ""
-#: src/components/modal/index.tsx:296
+#: src/components/modal/index.tsx:516
#, c-format
-msgid "is not the same as the current access token"
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
msgstr ""
-#: src/components/modal/index.tsx:299
+#: src/components/modal/index.tsx:536
#, c-format
-msgid "cannot be empty"
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
msgstr ""
-#: src/components/modal/index.tsx:301
+#: src/components/modal/index.tsx:549
#, c-format
-msgid "cannot be the same as the old token"
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
msgstr ""
-#: src/components/modal/index.tsx:305
+#: src/components/modal/index.tsx:694
#, c-format
-msgid "is not the same"
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
msgstr ""
-#: src/components/modal/index.tsx:315
+#: src/components/modal/index.tsx:701
#, c-format
-msgid "You are updating the access token from instance with id %1$s"
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
msgstr ""
-#: src/components/modal/index.tsx:331
+#: src/components/modal/index.tsx:708
+#, c-format
+msgid "Deleting an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
+msgstr ""
+
+#: src/components/modal/index.tsx:743
+#, c-format
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
+msgstr ""
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:786
+#, c-format
+msgid "Is not the same as the current access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:791
+#, c-format
+msgid "Can't be the same as the old token"
+msgstr ""
+
+#: src/components/modal/index.tsx:795
+#, c-format
+msgid "Is not the same"
+msgstr ""
+
+#: src/components/modal/index.tsx:803
+#, c-format
+msgid "You are updating the access token for the instance with id %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:819
#, c-format
msgid "Old access token"
msgstr ""
-#: src/components/modal/index.tsx:332
+#: src/components/modal/index.tsx:820
#, c-format
-msgid "access token currently in use"
+msgid "Access token currently in use"
msgstr ""
-#: src/components/modal/index.tsx:338
+#: src/components/modal/index.tsx:826
#, c-format
msgid "New access token"
msgstr ""
-#: src/components/modal/index.tsx:339
+#: src/components/modal/index.tsx:827
#, c-format
-msgid "next access token to be used"
+msgid "Next access token to be used"
msgstr ""
-#: src/components/modal/index.tsx:344
+#: src/components/modal/index.tsx:832
#, c-format
msgid "Repeat access token"
msgstr ""
-#: src/components/modal/index.tsx:345
+#: src/components/modal/index.tsx:833
#, c-format
-msgid "confirm the same access token"
+msgid "Confirm the same access token"
msgstr ""
-#: src/components/modal/index.tsx:350
+#: src/components/modal/index.tsx:838
#, c-format
msgid "Clearing the access token will mean public access to the instance"
msgstr ""
-#: src/components/modal/index.tsx:377
+#: src/components/modal/index.tsx:865
#, c-format
-msgid "cannot be the same as the old access token"
+msgid "Can't be the same as the old access token"
msgstr ""
-#: src/components/modal/index.tsx:394
+#: src/components/modal/index.tsx:880
#, c-format
msgid "You are setting the access token for the new instance"
msgstr ""
-#: src/components/modal/index.tsx:420
+#: src/components/modal/index.tsx:906
#, c-format
msgid ""
"With external authorization method no check will be done by the merchant "
"backend"
msgstr ""
-#: src/components/modal/index.tsx:436
+#: src/components/modal/index.tsx:922
#, c-format
msgid "Set external authorization"
msgstr ""
-#: src/components/modal/index.tsx:448
+#: src/components/modal/index.tsx:934
#, c-format
msgid "Set access token"
msgstr ""
-#: src/components/modal/index.tsx:470
+#: src/components/modal/index.tsx:956
#, c-format
msgid "Operation in progress..."
msgstr ""
-#: src/components/modal/index.tsx:479
+#: src/components/modal/index.tsx:965
#, c-format
msgid "The operation will be automatically canceled after %1$s seconds"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:80
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr ""
+
+#: src/paths/login/index.tsx:70
+#, c-format
+msgid "Your instance cannot be found"
+msgstr ""
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr ""
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr ""
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:79
#, c-format
msgid "Instances"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:93
+#: src/paths/admin/list/TableActive.tsx:92
#, c-format
msgid "Delete"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:99
+#: src/paths/admin/list/TableActive.tsx:98
#, c-format
-msgid "add new instance"
+msgid "Add new instance"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:178
+#: src/paths/admin/list/TableActive.tsx:175
#, c-format
msgid "ID"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:181
+#: src/paths/admin/list/TableActive.tsx:178
#, c-format
msgid "Name"
msgstr ""
@@ -192,132 +483,588 @@ msgstr ""
#: src/paths/admin/list/TableActive.tsx:261
#, c-format
-msgid "There is no instances yet, add more pressing the + sign"
+msgid "There are no instances yet, add more pressing the + sign"
msgstr ""
-#: src/paths/admin/list/View.tsx:68
+#: src/paths/admin/list/View.tsx:66
#, c-format
msgid "Only show active instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:71
+#: src/paths/admin/list/View.tsx:69
#, c-format
msgid "Active"
msgstr ""
-#: src/paths/admin/list/View.tsx:78
+#: src/paths/admin/list/View.tsx:76
#, c-format
msgid "Only show deleted instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:81
+#: src/paths/admin/list/View.tsx:79
#, c-format
msgid "Deleted"
msgstr ""
-#: src/paths/admin/list/View.tsx:88
+#: src/paths/admin/list/View.tsx:86
#, c-format
msgid "Show all instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:91
+#: src/paths/admin/list/View.tsx:89
#, c-format
msgid "All"
msgstr ""
-#: src/paths/admin/list/index.tsx:101
+#: src/paths/admin/list/index.tsx:100
#, c-format
msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/admin/list/index.tsx:106
+#: src/paths/admin/list/index.tsx:105
#, c-format
msgid "Failed to delete instance"
msgstr ""
-#: src/paths/admin/list/index.tsx:124
+#: src/paths/admin/list/index.tsx:140
#, c-format
-msgid "Instance '%1$s' (ID: %2$s) has been disabled"
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
msgstr ""
-#: src/paths/admin/list/index.tsx:129
+#: src/paths/admin/list/index.tsx:145
#, c-format
msgid "Failed to purge instance"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:41
+#: src/components/exception/AsyncButton.tsx:43
#, c-format
-msgid "Pending KYC verification"
+msgid "Loading..."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:86
+#, c-format
+msgid "This is not a valid bitcoin address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:66
+#: src/components/form/InputPaytoForm.tsx:99
#, c-format
-msgid "Timed out"
+msgid "This is not a valid Ethereum address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:103
+#: src/components/form/InputPaytoForm.tsx:128
#, c-format
-msgid "Exchange"
+msgid "This is not a valid host."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:151
+#, c-format
+msgid "IBAN numbers usually have more that 4 digits"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:106
+#: src/components/form/InputPaytoForm.tsx:153
#, c-format
-msgid "Target account"
+msgid "IBAN numbers usually have less that 34 digits"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:109
+#: src/components/form/InputPaytoForm.tsx:161
#, c-format
-msgid "KYC URL"
+msgid "IBAN country code not found"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:144
+#: src/components/form/InputPaytoForm.tsx:186
+#, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:330
#, c-format
msgid "Code"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:147
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, c-format
+msgid "International Bank Account Number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, c-format
+msgid "Invalid url"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr "Conto:"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, c-format
+msgid "Auth type"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, c-format
+msgid "With token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, c-format
+msgid "Do not change"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, c-format
+msgid "Not verified"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, c-format
+msgid "Confirm operation"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, c-format
+msgid "Account details"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr ""
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, c-format
+msgid "Could not create account"
+msgstr ""
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr ""
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, c-format
+msgid "Bank accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, c-format
+msgid "Add new account"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, c-format
+msgid "Wire method: Bitcoin"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, c-format
+msgid "Delete selected accounts from the database"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, c-format
+msgid "Wire method: x-taler-bank"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, c-format
+msgid "Account name"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, c-format
+msgid "Wire method: IBAN"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, c-format
+msgid "Other accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format
+msgid "Reason"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:140
+#, c-format
+msgid "The exchange require a account verification."
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
#, c-format
msgid "Http Status"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:177
+#: src/paths/instance/kyc/list/ListPage.tsx:199
#, c-format
msgid "No pending kyc verification!"
msgstr ""
-#: src/components/form/InputDate.tsx:123
+#: src/components/form/InputDate.tsx:127
#, c-format
-msgid "change value to unknown date"
+msgid "Change value to unknown date"
msgstr ""
-#: src/components/form/InputDate.tsx:124
+#: src/components/form/InputDate.tsx:128
#, c-format
-msgid "change value to empty"
+msgid "Change value to empty"
msgstr ""
-#: src/components/form/InputDate.tsx:131
+#: src/components/form/InputDate.tsx:140
#, c-format
-msgid "clear"
+msgid "Change value to never"
msgstr ""
-#: src/components/form/InputDate.tsx:136
+#: src/components/form/InputDate.tsx:145
#, c-format
-msgid "change value to never"
+msgid "Never"
msgstr ""
-#: src/components/form/InputDate.tsx:141
+#: src/components/picker/DurationPicker.tsx:55
#, c-format
-msgid "never"
+msgid "days"
msgstr ""
-#: src/components/form/InputLocation.tsx:29
+#: src/components/picker/DurationPicker.tsx:65
#, c-format
-msgid "Country"
+msgid "hours"
msgstr ""
-#: src/components/form/InputLocation.tsx:33
+#: src/components/picker/DurationPicker.tsx:76
#, c-format
-msgid "Address"
+msgid "minutes"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:62
+#, c-format
+msgid "Forever"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr ""
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
msgstr ""
#: src/components/form/InputLocation.tsx:39
@@ -360,126 +1107,141 @@ msgstr ""
msgid "Country subdivision"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:66
-#, c-format
-msgid "Product id"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:69
+#: src/components/form/InputSearchOnList.tsx:80
#, c-format
msgid "Description"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:94
+#: src/components/form/InputSearchOnList.tsx:106
#, c-format
-msgid "Product"
+msgid "Enter description or id"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:95
+#: src/components/form/InputSearchOnList.tsx:164
#, c-format
-msgid "search products by it's description or id"
+msgid "no match found with that description or id"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:151
-#, c-format
-msgid "no products found with that description"
-msgstr ""
-
-#: src/components/product/InventoryProductForm.tsx:56
+#: src/components/product/InventoryProductForm.tsx:57
#, c-format
msgid "You must enter a valid product identifier."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:64
+#: src/components/product/InventoryProductForm.tsx:65
#, c-format
msgid "Quantity must be greater than 0!"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:76
+#: src/components/product/InventoryProductForm.tsx:77
#, c-format
msgid ""
"This quantity exceeds remaining stock. Currently, only %1$s units remain "
"unreserved in stock."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:109
+#: src/components/product/InventoryProductForm.tsx:100
+#, c-format
+msgid "Search product"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:112
#, c-format
msgid "Quantity"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:110
+#: src/components/product/InventoryProductForm.tsx:113
#, c-format
-msgid "how many products will be added"
+msgid "How many products will be added"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:117
+#: src/components/product/InventoryProductForm.tsx:120
#, c-format
msgid "Add from inventory"
msgstr ""
-#: src/components/form/InputImage.tsx:105
+#: src/components/form/InputImage.tsx:107
#, c-format
-msgid "Image should be smaller than 1 MB"
+msgid "Image must be smaller than 1 MB"
msgstr ""
-#: src/components/form/InputImage.tsx:110
+#: src/components/form/InputImage.tsx:112
#, c-format
msgid "Add"
msgstr ""
-#: src/components/form/InputImage.tsx:115
+#: src/components/form/InputImage.tsx:122
#, c-format
msgid "Remove"
msgstr ""
-#: src/components/form/InputTaxes.tsx:113
+#: src/components/form/InputTaxes.tsx:47
+#, c-format
+msgid "Invalid"
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:103
#, c-format
msgid "No taxes configured for this product."
msgstr ""
-#: src/components/form/InputTaxes.tsx:119
+#: src/components/form/InputTaxes.tsx:109
#, c-format
msgid "Amount"
msgstr "Importo"
-#: src/components/form/InputTaxes.tsx:120
+#: src/components/form/InputTaxes.tsx:110
#, c-format
msgid ""
"Taxes can be in currencies that differ from the main currency used by the "
"merchant."
msgstr ""
-#: src/components/form/InputTaxes.tsx:122
+#: src/components/form/InputTaxes.tsx:112
#, c-format
msgid ""
"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
msgstr ""
-#: src/components/form/InputTaxes.tsx:131
+#: src/components/form/InputTaxes.tsx:121
#, c-format
msgid "Legal name of the tax, e.g. VAT or import duties."
msgstr ""
-#: src/components/form/InputTaxes.tsx:137
+#: src/components/form/InputTaxes.tsx:127
#, c-format
-msgid "add tax to the tax list"
+msgid "Add tax to the tax list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:72
+#: src/components/product/NonInventoryProductForm.tsx:71
#, c-format
-msgid "describe and add a product that is not in the inventory list"
+msgid "Describe and add a product that is not in the inventory list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:75
+#: src/components/product/NonInventoryProductForm.tsx:74
#, c-format
msgid "Add custom product"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:86
+#: src/components/product/NonInventoryProductForm.tsx:85
#, c-format
msgid "Complete information of the product"
msgstr ""
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, c-format
+msgid "Must be a number"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, c-format
+msgid "Must be grater than 0"
+msgstr ""
+
#: src/components/product/NonInventoryProductForm.tsx:185
#, c-format
msgid "Image"
@@ -487,12 +1249,12 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:186
#, c-format
-msgid "photo of the product"
+msgid "Photo of the product."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:192
#, c-format
-msgid "full product description"
+msgid "Full product description."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:196
@@ -502,7 +1264,7 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:197
#, c-format
-msgid "name of the product unit"
+msgid "Name of the product unit."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:201
@@ -512,796 +1274,863 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:202
#, c-format
-msgid "amount in the current currency"
+msgid "Amount in the current currency."
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:211
+#: src/components/product/NonInventoryProductForm.tsx:208
#, c-format
-msgid "Taxes"
+msgid "How many products will be added."
msgstr ""
-#: src/components/product/ProductList.tsx:38
-#, c-format
-msgid "image"
-msgstr ""
-
-#: src/components/product/ProductList.tsx:41
-#, c-format
-msgid "description"
-msgstr ""
-
-#: src/components/product/ProductList.tsx:44
+#: src/components/product/NonInventoryProductForm.tsx:211
#, c-format
-msgid "quantity"
+msgid "Taxes"
msgstr ""
-#: src/components/product/ProductList.tsx:47
+#: src/components/product/ProductList.tsx:46
#, c-format
-msgid "unit price"
+msgid "Unit price"
msgstr ""
-#: src/components/product/ProductList.tsx:50
+#: src/components/product/ProductList.tsx:49
#, c-format
-msgid "total price"
+msgid "Total price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:153
+#: src/paths/instance/orders/create/CreatePage.tsx:162
#, c-format
-msgid "required"
+msgid "Must be greater than 0"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:157
+#: src/paths/instance/orders/create/CreatePage.tsx:173
#, c-format
-msgid "not valid"
+msgid "Refund deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:159
+#: src/paths/instance/orders/create/CreatePage.tsx:179
#, c-format
-msgid "must be greater than 0"
+msgid "Wire transfer deadline can't be before refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:164
+#: src/paths/instance/orders/create/CreatePage.tsx:188
#, c-format
-msgid "not a valid json"
+msgid "Wire transfer deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:170
+#: src/paths/instance/orders/create/CreatePage.tsx:196
#, c-format
-msgid "should be in the future"
+msgid "Must have a refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:173
+#: src/paths/instance/orders/create/CreatePage.tsx:201
#, c-format
-msgid "refund deadline cannot be before pay deadline"
+msgid "Auto refund can't be after refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:179
+#: src/paths/instance/orders/create/CreatePage.tsx:208
#, c-format
-msgid "wire transfer deadline cannot be before refund deadline"
+msgid "Must be in the future"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:190
+#: src/paths/instance/orders/create/CreatePage.tsx:376
#, c-format
-msgid "wire transfer deadline cannot be before pay deadline"
+msgid "Simple"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:197
+#: src/paths/instance/orders/create/CreatePage.tsx:388
#, c-format
-msgid "should have a refund deadline"
+msgid "Advanced"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:202
+#: src/paths/instance/orders/create/CreatePage.tsx:400
#, c-format
-msgid "auto refund cannot be after refund deadline"
+msgid "Manage products in order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:360
+#: src/paths/instance/orders/create/CreatePage.tsx:404
#, c-format
-msgid "Manage products in order"
+msgid "%1$s products with a total price of %2$s."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:369
+#: src/paths/instance/orders/create/CreatePage.tsx:411
#, c-format
msgid "Manage list of products in the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:391
+#: src/paths/instance/orders/create/CreatePage.tsx:435
#, c-format
msgid "Remove this product from the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:415
-#, c-format
-msgid "Total price"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:417
+#: src/paths/instance/orders/create/CreatePage.tsx:461
#, c-format
-msgid "total product price added up"
+msgid "Total product price added up"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:430
+#: src/paths/instance/orders/create/CreatePage.tsx:474
#, c-format
msgid "Amount to be paid by the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:436
+#: src/paths/instance/orders/create/CreatePage.tsx:480
#, c-format
msgid "Order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:437
+#: src/paths/instance/orders/create/CreatePage.tsx:481
#, c-format
-msgid "final order price"
+msgid "Final order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:444
+#: src/paths/instance/orders/create/CreatePage.tsx:488
#, c-format
msgid "Summary"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:445
+#: src/paths/instance/orders/create/CreatePage.tsx:489
#, c-format
msgid "Title of the order to be shown to the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:450
+#: src/paths/instance/orders/create/CreatePage.tsx:495
#, c-format
-msgid "Shipping and Fulfillment"
+msgid "Shipping and fulfillment"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:455
+#: src/paths/instance/orders/create/CreatePage.tsx:500
#, c-format
msgid "Delivery date"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:456
+#: src/paths/instance/orders/create/CreatePage.tsx:501
#, c-format
msgid "Deadline for physical delivery assured by the merchant."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:461
+#: src/paths/instance/orders/create/CreatePage.tsx:506
#, c-format
msgid "Location"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:462
+#: src/paths/instance/orders/create/CreatePage.tsx:507
#, c-format
-msgid "address where the products will be delivered"
+msgid "Address where the products will be delivered"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:469
+#: src/paths/instance/orders/create/CreatePage.tsx:514
#, c-format
msgid "Fulfillment URL"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:470
+#: src/paths/instance/orders/create/CreatePage.tsx:515
#, c-format
msgid "URL to which the user will be redirected after successful payment."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:476
+#: src/paths/instance/orders/create/CreatePage.tsx:523
#, c-format
msgid "Taler payment options"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:477
+#: src/paths/instance/orders/create/CreatePage.tsx:524
#, c-format
msgid "Override default Taler payment settings for this order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:481
+#: src/paths/instance/orders/create/CreatePage.tsx:529
#, c-format
-msgid "Payment deadline"
+msgid "Payment time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:482
+#: src/paths/instance/orders/create/CreatePage.tsx:535
#, c-format
msgid ""
-"Deadline for the customer to pay for the offer before it expires. Inventory "
-"products will be reserved until this deadline."
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:486
+#: src/paths/instance/orders/create/CreatePage.tsx:552
#, c-format
-msgid "Refund deadline"
+msgid "Default"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:487
+#: src/paths/instance/orders/create/CreatePage.tsx:561
+#, fuzzy, c-format
+msgid "Refund time"
+msgstr "Rimborsato"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:569
#, c-format
-msgid "Time until which the order can be refunded by the merchant."
+msgid ""
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:491
+#: src/paths/instance/orders/create/CreatePage.tsx:594
#, c-format
-msgid "Wire transfer deadline"
+msgid "Wire transfer time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:492
+#: src/paths/instance/orders/create/CreatePage.tsx:602
#, c-format
-msgid "Deadline for the exchange to make the wire transfer."
+msgid ""
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:496
+#: src/paths/instance/orders/create/CreatePage.tsx:628
#, c-format
-msgid "Auto-refund deadline"
+msgid "Auto-refund time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:497
+#: src/paths/instance/orders/create/CreatePage.tsx:634
#, c-format
msgid ""
"Time until which the wallet will automatically check for refunds without "
"user interaction."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:502
+#: src/paths/instance/orders/create/CreatePage.tsx:642
#, c-format
-msgid "Maximum deposit fee"
+msgid "Maximum fee"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:503
+#: src/paths/instance/orders/create/CreatePage.tsx:643
#, c-format
msgid ""
-"Maximum deposit fees the merchant is willing to cover for this order. Higher "
-"deposit fees must be covered in full by the consumer."
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:507
+#: src/paths/instance/orders/create/CreatePage.tsx:649
#, c-format
-msgid "Maximum wire fee"
+msgid "Create token"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:508
+#: src/paths/instance/orders/create/CreatePage.tsx:650
#, c-format
msgid ""
-"Maximum aggregate wire fees the merchant is willing to cover for this order. "
-"Wire fees exceeding this amount are to be covered by the customers."
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:512
+#: src/paths/instance/orders/create/CreatePage.tsx:656
#, c-format
-msgid "Wire fee amortization"
+msgid "Minimum age required"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:513
+#: src/paths/instance/orders/create/CreatePage.tsx:657
#, c-format
msgid ""
-"Factor by which wire fees exceeding the above threshold are divided to "
-"determine the share of excess wire fees to be paid explicitly by the "
-"consumer."
+"Any value greater than 0 will limit the coins able be used to pay this "
+"contract. If empty the age restriction will be defined by the products"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:517
+#: src/paths/instance/orders/create/CreatePage.tsx:660
#, c-format
-msgid "Create token"
+msgid "Min age defined by the producs is %1$s"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:518
+#: src/paths/instance/orders/create/CreatePage.tsx:661
#, c-format
-msgid ""
-"Uncheck this option if the merchant backend generated an order ID with "
-"enough entropy to prevent adversarial claims."
+msgid "No product with age restriction in this order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:522
+#: src/paths/instance/orders/create/CreatePage.tsx:671
#, c-format
-msgid "Minimum age required"
+msgid "Additional information"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:523
+#: src/paths/instance/orders/create/CreatePage.tsx:672
#, c-format
-msgid ""
-"Any value greater than 0 will limit the coins able be used to pay this "
-"contract. If empty the age restriction will be defined by the products"
+msgid "Custom information to be included in the contract for this order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:526
+#: src/paths/instance/orders/create/CreatePage.tsx:681
#, c-format
-msgid "Min age defined by the producs is %1$s"
+msgid "You must enter a value in JavaScript Object Notation (JSON)."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:534
+#: src/paths/instance/orders/create/CreatePage.tsx:707
#, c-format
-msgid "Additional information"
+msgid "Custom field name"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:535
+#: src/paths/instance/orders/create/CreatePage.tsx:793
#, c-format
-msgid "Custom information to be included in the contract for this order."
+msgid "Disabled"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:541
+#: src/paths/instance/orders/create/CreatePage.tsx:796
#, c-format
-msgid "You must enter a value in JavaScript Object Notation (JSON)."
+msgid "No deadline"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:55
+#: src/paths/instance/orders/create/CreatePage.tsx:797
#, c-format
-msgid "days"
+msgid "Deadline at %1$s"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:65
+#: src/paths/instance/orders/create/index.tsx:109
#, c-format
-msgid "hours"
+msgid "Could not create order"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:76
+#: src/paths/instance/orders/create/index.tsx:111
#, c-format
-msgid "minutes"
+msgid "No exchange would accept a payment because of KYC requirements."
msgstr ""
-#: src/components/picker/DurationPicker.tsx:87
+#: src/paths/instance/orders/create/index.tsx:129
#, c-format
-msgid "seconds"
+msgid "No more stock for product with ID \"%1$s\"."
msgstr ""
-#: src/components/form/InputDuration.tsx:53
+#: src/paths/instance/orders/list/Table.tsx:75
#, c-format
-msgid "forever"
+msgid "Orders"
msgstr ""
-#: src/components/form/InputDuration.tsx:62
+#: src/paths/instance/orders/list/Table.tsx:81
#, c-format
-msgid "%1$sM"
+msgid "Create order"
msgstr ""
-#: src/components/form/InputDuration.tsx:64
+#: src/paths/instance/orders/list/Table.tsx:138
#, c-format
-msgid "%1$sY"
+msgid "Load first page"
msgstr ""
-#: src/components/form/InputDuration.tsx:66
+#: src/paths/instance/orders/list/Table.tsx:145
#, c-format
-msgid "%1$sd"
+msgid "Date"
+msgstr "Data"
+
+#: src/paths/instance/orders/list/Table.tsx:191
+#, c-format
+msgid "Refund"
msgstr ""
-#: src/components/form/InputDuration.tsx:68
+#: src/paths/instance/orders/list/Table.tsx:200
#, c-format
-msgid "%1$sh"
+msgid "copy url"
msgstr ""
-#: src/components/form/InputDuration.tsx:70
+#: src/paths/instance/orders/list/Table.tsx:213
#, c-format
-msgid "%1$smin"
+msgid "Load more orders after the last one"
msgstr ""
-#: src/components/form/InputDuration.tsx:72
+#: src/paths/instance/orders/list/Table.tsx:216
#, c-format
-msgid "%1$ssec"
+msgid "Load next page"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:75
+#: src/paths/instance/orders/list/Table.tsx:233
#, c-format
-msgid "Orders"
+msgid "No orders have been found matching your query!"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:81
+#: src/paths/instance/orders/list/Table.tsx:280
#, c-format
-msgid "create order"
+msgid "Duplicated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:147
+#: src/paths/instance/orders/list/Table.tsx:293
#, c-format
-msgid "load newer orders"
+msgid "This value exceed the refundable amount"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:154
+#: src/paths/instance/orders/list/Table.tsx:381
#, c-format
-msgid "Date"
-msgstr "Data"
+msgid "Amount to be refunded"
+msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:200
+#: src/paths/instance/orders/list/Table.tsx:383
#, c-format
-msgid "Refund"
+msgid "Max refundable:"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:209
+#: src/paths/instance/orders/list/Table.tsx:391
#, c-format
-msgid "copy url"
+msgid "Requested by the customer"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:225
+#: src/paths/instance/orders/list/Table.tsx:392
#, c-format
-msgid "load older orders"
+msgid "Other"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:242
+#: src/paths/instance/orders/list/Table.tsx:395
#, c-format
-msgid "No orders have been found matching your query!"
+msgid "Why this order is being refunded"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:288
+#: src/paths/instance/orders/list/Table.tsx:401
#, c-format
-msgid "duplicated"
+msgid "More information to give context"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:299
+#: src/paths/instance/orders/details/DetailPage.tsx:70
#, c-format
-msgid "invalid format"
+msgid "Contract terms"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:76
#, c-format
-msgid "this value exceed the refundable amount"
+msgid "Human-readable description of the whole purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:346
+#: src/paths/instance/orders/details/DetailPage.tsx:82
#, c-format
-msgid "date"
+msgid "Total price for the transaction"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:349
+#: src/paths/instance/orders/details/DetailPage.tsx:89
#, c-format
-msgid "amount"
+msgid "URL for this purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:352
+#: src/paths/instance/orders/details/DetailPage.tsx:95
#, c-format
-msgid "reason"
+msgid "Max fee"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:389
+#: src/paths/instance/orders/details/DetailPage.tsx:96
#, c-format
-msgid "amount to be refunded"
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:391
+#: src/paths/instance/orders/details/DetailPage.tsx:101
#, c-format
-msgid "Max refundable:"
+msgid "Created at"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:396
+#: src/paths/instance/orders/details/DetailPage.tsx:102
#, c-format
-msgid "Reason"
+msgid "Time when this contract was generated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:397
+#: src/paths/instance/orders/details/DetailPage.tsx:107
#, c-format
-msgid "Choose one..."
+msgid "Refund deadline"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:399
+#: src/paths/instance/orders/details/DetailPage.tsx:108
#, c-format
-msgid "requested by the customer"
+msgid "After this deadline has passed no refunds will be accepted"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:400
+#: src/paths/instance/orders/details/DetailPage.tsx:113
#, c-format
-msgid "other"
+msgid "Payment deadline"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:403
+#: src/paths/instance/orders/details/DetailPage.tsx:114
#, c-format
-msgid "why this order is being refunded"
+msgid ""
+"After this deadline, the merchant won't accept payments for the contract"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:409
+#: src/paths/instance/orders/details/DetailPage.tsx:119
#, c-format
-msgid "more information to give context"
+msgid "Wire transfer deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:62
+#: src/paths/instance/orders/details/DetailPage.tsx:120
#, c-format
-msgid "Contract Terms"
+msgid "Transfer deadline for the exchange"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:68
+#: src/paths/instance/orders/details/DetailPage.tsx:126
#, c-format
-msgid "human-readable description of the whole purchase"
+msgid "Time indicating when the order should be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:74
+#: src/paths/instance/orders/details/DetailPage.tsx:132
#, c-format
-msgid "total price for the transaction"
+msgid "Where the order will be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:81
+#: src/paths/instance/orders/details/DetailPage.tsx:140
#, c-format
-msgid "URL for this purchase"
+msgid "Auto-refund delay"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:87
+#: src/paths/instance/orders/details/DetailPage.tsx:141
#, c-format
-msgid "Max fee"
+msgid ""
+"How long the wallet should try to get an automatic refund for the purchase"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:88
+#: src/paths/instance/orders/details/DetailPage.tsx:146
#, c-format
-msgid "maximum total deposit fee accepted by the merchant for this contract"
+msgid "Extra info"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:93
+#: src/paths/instance/orders/details/DetailPage.tsx:147
#, c-format
-msgid "Max wire fee"
+msgid "Extra data that is only interpreted by the merchant frontend"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:94
+#: src/paths/instance/orders/details/DetailPage.tsx:220
#, c-format
-msgid "maximum wire fee accepted by the merchant"
+msgid "Order"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:100
+#: src/paths/instance/orders/details/DetailPage.tsx:222
#, c-format
-msgid ""
-"over how many customer transactions does the merchant expect to amortize "
-"wire fees on average"
+msgid "Claimed"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:105
+#: src/paths/instance/orders/details/DetailPage.tsx:249
#, c-format
-msgid "Created at"
+msgid "Claimed at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:106
+#: src/paths/instance/orders/details/DetailPage.tsx:271
#, c-format
-msgid "time when this contract was generated"
+msgid "Timeline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:112
+#: src/paths/instance/orders/details/DetailPage.tsx:277
#, c-format
-msgid "after this deadline has passed no refunds will be accepted"
+msgid "Payment details"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:118
+#: src/paths/instance/orders/details/DetailPage.tsx:297
#, c-format
-msgid ""
-"after this deadline, the merchant won't accept payments for the contract"
+msgid "Order status"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:124
+#: src/paths/instance/orders/details/DetailPage.tsx:307
#, c-format
-msgid "transfer deadline for the exchange"
+msgid "Product list"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:130
+#: src/paths/instance/orders/details/DetailPage.tsx:459
#, c-format
-msgid "time indicating when the order should be delivered"
+msgid "Paid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:136
+#: src/paths/instance/orders/details/DetailPage.tsx:463
#, c-format
-msgid "where the order will be delivered"
+msgid "Wired"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:144
+#: src/paths/instance/orders/details/DetailPage.tsx:468
#, c-format
-msgid "Auto-refund delay"
+msgid "Refunded"
+msgstr "Rimborsato"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:488
+#, fuzzy, c-format
+msgid "Refund order"
+msgstr "Rimborsato"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:489
+#, c-format
+msgid "Not refundable"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:145
+#: src/paths/instance/orders/details/DetailPage.tsx:519
#, c-format
-msgid ""
-"how long the wallet should try to get an automatic refund for the purchase"
+msgid "Next event in"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:150
+#: src/paths/instance/orders/details/DetailPage.tsx:555
#, c-format
-msgid "Extra info"
+msgid "Refunded amount"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:151
+#: src/paths/instance/orders/details/DetailPage.tsx:562
#, c-format
-msgid "extra data that is only interpreted by the merchant frontend"
+msgid "Refund taken"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:219
+#: src/paths/instance/orders/details/DetailPage.tsx:572
#, c-format
-msgid "Order"
+msgid "Status URL"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:221
+#: src/paths/instance/orders/details/DetailPage.tsx:585
#, c-format
-msgid "claimed"
+msgid "Refund URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:247
+#: src/paths/instance/orders/details/DetailPage.tsx:639
#, c-format
-msgid "claimed at"
+msgid "Unpaid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:265
+#: src/paths/instance/orders/details/DetailPage.tsx:657
#, c-format
-msgid "Timeline"
+msgid "Pay at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:271
+#: src/paths/instance/orders/details/DetailPage.tsx:710
#, c-format
-msgid "Payment details"
+msgid "Order status URL"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:291
+#: src/paths/instance/orders/details/DetailPage.tsx:714
#, c-format
-msgid "Order status"
+msgid "Payment URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:743
#, c-format
-msgid "Product list"
+msgid ""
+"Unknown order status. This is an error, please contact the administrator."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:451
+#: src/paths/instance/orders/details/DetailPage.tsx:770
#, c-format
-msgid "paid"
+msgid "Back"
+msgstr "Indietro"
+
+#: src/paths/instance/orders/details/index.tsx:88
+#, c-format
+msgid "Refund created successfully"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:455
+#: src/paths/instance/orders/details/index.tsx:95
#, c-format
-msgid "wired"
+msgid "Could not create the refund"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:460
+#: src/paths/instance/orders/details/index.tsx:97
#, c-format
-msgid "refunded"
+msgid "There are pending KYC requirements."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:480
+#: src/components/form/JumpToElementById.tsx:39
#, c-format
-msgid "refund order"
+msgid "Missing id"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:481
+#: src/components/form/JumpToElementById.tsx:48
#, c-format
-msgid "not refundable"
+msgid "Not found"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:489
+#: src/paths/instance/orders/list/ListPage.tsx:83
#, c-format
-msgid "refund"
+msgid "Select date to show nearby orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:553
+#: src/paths/instance/orders/list/ListPage.tsx:96
#, c-format
-msgid "Refunded amount"
+msgid "Only show paid orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:560
+#: src/paths/instance/orders/list/ListPage.tsx:99
#, c-format
-msgid "Refund taken"
+msgid "New"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:570
+#: src/paths/instance/orders/list/ListPage.tsx:116
#, c-format
-msgid "Status URL"
+msgid "Only show orders with refunds"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:583
+#: src/paths/instance/orders/list/ListPage.tsx:126
#, c-format
-msgid "Refund URI"
+msgid ""
+"Only show orders where customers paid, but wire payments from payment "
+"provider are still pending"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:636
+#: src/paths/instance/orders/list/ListPage.tsx:129
#, c-format
-msgid "unpaid"
+msgid "Not wired"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:654
+#: src/paths/instance/orders/list/ListPage.tsx:139
#, c-format
-msgid "pay at"
+msgid "Completed"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:666
+#: src/paths/instance/orders/list/ListPage.tsx:146
#, c-format
-msgid "created at"
+msgid "Remove all filters"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:707
+#: src/paths/instance/orders/list/ListPage.tsx:164
#, c-format
-msgid "Order status URL"
+msgid "Clear date filter"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:711
+#: src/paths/instance/orders/list/ListPage.tsx:178
#, c-format
-msgid "Payment URI"
+msgid "Jump to date (%1$s)"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:740
+#: src/paths/instance/orders/list/index.tsx:113
#, c-format
-msgid ""
-"Unknown order status. This is an error, please contact the administrator."
+msgid "Jump to order with the given product ID"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:767
+#: src/paths/instance/orders/list/index.tsx:114
#, c-format
-msgid "Back"
-msgstr "Indietro"
+msgid "Order id"
+msgstr ""
-#: src/paths/instance/orders/details/index.tsx:79
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
#, c-format
-msgid "refund created successfully"
+msgid "Invalid. Please insert only characters and numbers"
msgstr ""
-#: src/paths/instance/orders/details/index.tsx:85
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
#, c-format
-msgid "could not create the refund"
+msgid "Just letters and numbers from 2 to 7"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:78
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
#, c-format
-msgid "select date to show nearby orders"
+msgid "Size of the key must be 32"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:94
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
#, c-format
-msgid "order id"
+msgid "Internal id on the system"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:100
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
#, c-format
-msgid "jump to order with the given order ID"
+msgid "Useful to identify the device physically"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:122
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
#, c-format
-msgid "remove all filters"
+msgid "Verification algorithm"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:132
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
#, c-format
-msgid "only show paid orders"
+msgid "Algorithm to use to verify transaction in offline mode"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:135
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
#, c-format
-msgid "Paid"
+msgid "Device key"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:142
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
#, c-format
-msgid "only show orders with refunds"
+msgid "Be sure to be very hard to guess or use the random generator"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:145
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
#, c-format
-msgid "Refunded"
-msgstr "Rimborsato"
+msgid "Your device need to have exactly the same value"
+msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:152
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
+#, c-format
+msgid "Generate random secret key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
+#, c-format
+msgid "Random"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
#, c-format
msgid ""
-"only show orders where customers paid, but wire payments from payment "
-"provider are still pending"
+"You can scan the next QR code with your device or save the key before "
+"continuing."
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:155
+#: src/paths/instance/otp_devices/create/index.tsx:60
#, c-format
-msgid "Not wired"
+msgid "Device added successfully"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:170
+#: src/paths/instance/otp_devices/create/index.tsx:66
#, c-format
-msgid "clear date filter"
+msgid "Could not add device"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:184
+#: src/paths/instance/otp_devices/list/Table.tsx:57
#, c-format
-msgid "date (YYYY/MM/DD)"
+msgid "OTP Devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:103
+#: src/paths/instance/otp_devices/list/Table.tsx:62
#, c-format
-msgid "Enter an order id"
+msgid "Add new devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:111
+#: src/paths/instance/otp_devices/list/Table.tsx:117
#, c-format
-msgid "order not found"
+msgid "Load more devices before the first one"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:178
+#: src/paths/instance/otp_devices/list/Table.tsx:155
#, c-format
-msgid "could not get the order to refund"
+msgid "Delete selected devices from the database"
msgstr ""
-#: src/components/exception/AsyncButton.tsx:43
+#: src/paths/instance/otp_devices/list/Table.tsx:170
#, c-format
-msgid "Loading..."
+msgid "Load more devices after the last one"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:90
+#, c-format
+msgid "Device delete successfully"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:95
+#, c-format
+msgid "Could not delete the device"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
+#, c-format
+msgid "Device:"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
+#, c-format
+msgid "Not modified"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
+#, c-format
+msgid "Change key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:119
+#, c-format
+msgid "Could not update template"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:121
+#, c-format
+msgid "Template id is unknown"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:129
+#, c-format
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
msgstr ""
#: src/components/form/InputStock.tsx:99
#, c-format
msgid ""
-"click here to configure the stock of the product, leave it as is and the "
-"backend will not control stock"
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
msgstr ""
#: src/components/form/InputStock.tsx:109
@@ -1311,7 +2140,7 @@ msgstr ""
#: src/components/form/InputStock.tsx:115
#, c-format
-msgid "this product has been configured without stock control"
+msgid "This product has been configured without stock control"
msgstr ""
#: src/components/form/InputStock.tsx:119
@@ -1321,1404 +2150,1515 @@ msgstr ""
#: src/components/form/InputStock.tsx:136
#, c-format
-msgid "lost cannot be greater than current and incoming (max %1$s)"
+msgid "Lost can't be greater than current and incoming (max %1$s)"
msgstr ""
-#: src/components/form/InputStock.tsx:176
+#: src/components/form/InputStock.tsx:169
#, c-format
msgid "Incoming"
msgstr ""
-#: src/components/form/InputStock.tsx:177
+#: src/components/form/InputStock.tsx:170
#, c-format
msgid "Lost"
msgstr ""
-#: src/components/form/InputStock.tsx:192
+#: src/components/form/InputStock.tsx:185
#, c-format
msgid "Current"
msgstr ""
-#: src/components/form/InputStock.tsx:196
+#: src/components/form/InputStock.tsx:189
#, c-format
-msgid "remove stock control for this product"
+msgid "Remove stock control for this product"
msgstr ""
-#: src/components/form/InputStock.tsx:202
+#: src/components/form/InputStock.tsx:195
#, c-format
msgid "without stock"
msgstr ""
-#: src/components/form/InputStock.tsx:211
+#: src/components/form/InputStock.tsx:204
#, c-format
msgid "Next restock"
msgstr ""
-#: src/components/form/InputStock.tsx:217
+#: src/components/form/InputStock.tsx:208
+#, c-format
+msgid "Warehouse address"
+msgstr ""
+
+#: src/components/form/InputArray.tsx:118
#, c-format
-msgid "Delivery address"
+msgid "Add element to the list"
msgstr ""
-#: src/components/product/ProductForm.tsx:133
+#: src/components/product/ProductForm.tsx:120
#, c-format
-msgid "product identification to use in URLs (for internal use only)"
+msgid "Invalid amount"
msgstr ""
-#: src/components/product/ProductForm.tsx:139
+#: src/components/product/ProductForm.tsx:191
#, c-format
-msgid "illustration of the product for customers"
+msgid "Product identification to use in URLs (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:145
+#: src/components/product/ProductForm.tsx:197
#, c-format
-msgid "product description for customers"
+msgid "Illustration of the product for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:149
+#: src/components/product/ProductForm.tsx:203
#, c-format
-msgid "Age restricted"
+msgid "Product description for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:150
+#: src/components/product/ProductForm.tsx:207
#, c-format
-msgid "is this product restricted for customer below certain age?"
+msgid "Age restriction"
msgstr ""
-#: src/components/product/ProductForm.tsx:155
+#: src/components/product/ProductForm.tsx:208
+#, c-format
+msgid "Is this product restricted for customer below certain age?"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:209
+#, c-format
+msgid "Minimum age of the customer"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:213
+#, c-format
+msgid "Unit name"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:214
#, c-format
msgid ""
-"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
-"items, 5 meters) for customers"
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:215
+#, c-format
+msgid "Example: kg, items or liters"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:219
+#, c-format
+msgid "Price per unit"
msgstr ""
-#: src/components/product/ProductForm.tsx:160
+#: src/components/product/ProductForm.tsx:220
#, c-format
msgid ""
-"sale price for customers, including taxes, for above units of the product"
+"Sale price for customers, including taxes, for above units of the product."
msgstr ""
-#: src/components/product/ProductForm.tsx:164
+#: src/components/product/ProductForm.tsx:224
#, c-format
msgid "Stock"
msgstr ""
-#: src/components/product/ProductForm.tsx:166
+#: src/components/product/ProductForm.tsx:226
#, c-format
-msgid ""
-"product inventory for products with finite supply (for internal use only)"
+msgid "Inventory for products with finite supply (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:171
+#: src/components/product/ProductForm.tsx:231
#, c-format
-msgid "taxes included in the product price, exposed to customers"
+msgid "Taxes included in the product price, exposed to customers."
msgstr ""
-#: src/paths/instance/products/create/CreatePage.tsx:66
+#: src/components/product/ProductForm.tsx:235
#, c-format
-msgid "Need to complete marked fields"
+msgid "Categories"
msgstr ""
-#: src/paths/instance/products/create/index.tsx:51
+#: src/components/product/ProductForm.tsx:241
#, c-format
-msgid "could not create product"
+msgid "Search by category description or id"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:68
+#: src/components/product/ProductForm.tsx:242
#, c-format
-msgid "Products"
+msgid "Categories where this product will be listed on."
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:73
+#: src/paths/instance/products/create/index.tsx:52
#, c-format
-msgid "add product to inventory"
+msgid "Product created successfully"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:137
+#: src/paths/instance/products/create/index.tsx:58
#, c-format
-msgid "Sell"
+msgid "Could not create product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:143
+#: src/paths/instance/products/list/Table.tsx:76
#, c-format
-msgid "Profit"
+msgid "Inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:149
+#: src/paths/instance/products/list/Table.tsx:81
+#, c-format
+msgid "Add product to inventory"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:163
+#, c-format
+msgid "Sales"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:169
#, c-format
msgid "Sold"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:210
+#: src/paths/instance/products/list/Table.tsx:235
#, c-format
-msgid "free"
+msgid "Free"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:248
+#: src/paths/instance/products/list/Table.tsx:275
#, c-format
-msgid "go to product update page"
+msgid "Go to product update page"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:255
+#: src/paths/instance/products/list/Table.tsx:282
#, c-format
msgid "Update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:260
+#: src/paths/instance/products/list/Table.tsx:287
+#, c-format
+msgid "Remove this product from the database"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:323
#, c-format
-msgid "remove this product from the database"
+msgid "Load more products after the last one"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:331
+#: src/paths/instance/products/list/Table.tsx:365
#, c-format
-msgid "update the product with new price"
+msgid "Update the product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:341
+#: src/paths/instance/products/list/Table.tsx:376
#, c-format
-msgid "update product with new price"
+msgid "Update product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:399
+#: src/paths/instance/products/list/Table.tsx:387
#, c-format
-msgid "add more elements to the inventory"
+msgid "Confirm update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:404
+#: src/paths/instance/products/list/Table.tsx:435
#, c-format
-msgid "report elements lost in the inventory"
+msgid "Add more elements to the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:409
+#: src/paths/instance/products/list/Table.tsx:440
#, c-format
-msgid "new price for the product"
+msgid "Report elements lost in the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:421
+#: src/paths/instance/products/list/Table.tsx:445
#, c-format
-msgid "the are value with errors"
+msgid "New price for the product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:422
+#: src/paths/instance/products/list/Table.tsx:457
#, c-format
-msgid "update product with new stock and price"
+msgid "The are value with errors"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:463
+#: src/paths/instance/products/list/Table.tsx:458
#, c-format
-msgid "There is no products yet, add more pressing the + sign"
+msgid "Update product with new stock and price"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:499
+#, c-format
+msgid "There are no products yet, add more pressing the + sign"
msgstr ""
#: src/paths/instance/products/list/index.tsx:86
#, c-format
-msgid "product updated successfully"
+msgid "Jump to product with the given product ID"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:92
+#: src/paths/instance/products/list/index.tsx:87
#, c-format
-msgid "could not update the product"
+msgid "Product id"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:103
+#: src/paths/instance/products/list/index.tsx:104
#, c-format
-msgid "product delete successfully"
+msgid "Product updated successfully"
msgstr ""
#: src/paths/instance/products/list/index.tsx:109
#, c-format
-msgid "could not delete the product"
+msgid "Could not update the product"
msgstr ""
-#: src/paths/instance/products/update/UpdatePage.tsx:56
+#: src/paths/instance/products/list/index.tsx:144
#, c-format
-msgid "Product id:"
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:95
+#: src/paths/instance/products/list/index.tsx:149
+#, c-format
+msgid "Could not delete the product"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:165
#, c-format
msgid ""
-"To complete the setup of the reserve, you must now initiate a wire transfer "
-"using the given wire transfer subject and crediting the specified amount to "
-"the indicated account of the exchange."
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:102
+#: src/paths/instance/products/list/index.tsx:173
#, c-format
-msgid "If your system supports RFC 8905, you can do this by opening this URI:"
+msgid "Deleting an product can't be undone."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:83
+#: src/paths/instance/products/update/UpdatePage.tsx:56
#, c-format
-msgid "it should be greater than 0"
+msgid "Product id:"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:88
+#: src/paths/instance/products/update/index.tsx:85
#, c-format
-msgid "must be a valid URL"
+msgid "Product (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:107
+#: src/paths/instance/products/update/index.tsx:91
#, c-format
-msgid "Initial balance"
+msgid "Could not update product"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:112
#, c-format
-msgid "balance prior to deposit"
+msgid "Must be greater that 0"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:119
#, c-format
-msgid "Exchange URL"
+msgid "Too short"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:113
+#: src/paths/instance/templates/create/CreatePage.tsx:192
#, c-format
-msgid "URL of exchange"
+msgid "Identifier"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:148
+#: src/paths/instance/templates/create/CreatePage.tsx:193
#, c-format
-msgid "Next"
+msgid "Name of the template in URLs."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:186
+#: src/paths/instance/templates/create/CreatePage.tsx:199
#, c-format
-msgid "Wire method"
+msgid "Describe what this template stands for"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:187
+#: src/paths/instance/templates/create/CreatePage.tsx:206
#, c-format
-msgid "method to use for wire transfer"
+msgid "If specified, this template will create an order with the same summary"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:189
+#: src/paths/instance/templates/create/CreatePage.tsx:210
#, c-format
-msgid "Select one wire method"
+msgid "Summary is editable"
msgstr ""
-#: src/paths/instance/reserves/create/index.tsx:62
+#: src/paths/instance/templates/create/CreatePage.tsx:211
#, c-format
-msgid "could not create reserve"
+msgid "Allow the user to change the summary."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:77
+#: src/paths/instance/templates/create/CreatePage.tsx:217
#, c-format
-msgid "Valid until"
+msgid "If specified, this template will create an order with the same price"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:82
+#: src/paths/instance/templates/create/CreatePage.tsx:221
#, c-format
-msgid "Created balance"
+msgid "Amount is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:99
+#: src/paths/instance/templates/create/CreatePage.tsx:222
#, c-format
-msgid "Exchange balance"
+msgid "Allow the user to select the amount to pay."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:104
+#: src/paths/instance/templates/create/CreatePage.tsx:229
#, c-format
-msgid "Picked up"
+msgid "Currency is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:109
+#: src/paths/instance/templates/create/CreatePage.tsx:230
#, c-format
-msgid "Committed"
+msgid "Allow the user to change currency."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:116
+#: src/paths/instance/templates/create/CreatePage.tsx:232
#, c-format
-msgid "Account address"
+msgid "Supported currencies"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:233
#, c-format
-msgid "Subject"
-msgstr "Soggetto"
+msgid "Supported currencies: %1$s"
+msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:130
+#: src/paths/instance/templates/create/CreatePage.tsx:241
#, c-format
-msgid "Tips"
+msgid "Minimum age"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:193
+#: src/paths/instance/templates/create/CreatePage.tsx:243
#, c-format
-msgid "No tips has been authorized from this reserve"
+msgid "Is this contract restricted to some age?"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:213
+#: src/paths/instance/templates/create/CreatePage.tsx:247
#, c-format
-msgid "Authorized"
+msgid "Payment timeout"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:222
+#: src/paths/instance/templates/create/CreatePage.tsx:249
#, c-format
-msgid "Expiration"
+msgid ""
+"How much time the customer has to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:254
#, c-format
-msgid "amount of tip"
+msgid "OTP device"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:255
#, c-format
-msgid "Justification"
+msgid "Use to verify transaction while offline."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:114
+#: src/paths/instance/templates/create/CreatePage.tsx:257
#, c-format
-msgid "reason for the tip"
+msgid "No OTP device."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:118
+#: src/paths/instance/templates/create/CreatePage.tsx:259
#, c-format
-msgid "URL after tip"
+msgid "Add one first"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:272
#, c-format
-msgid "URL to visit after tip payment"
+msgid "No device"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:65
+#: src/paths/instance/templates/create/CreatePage.tsx:276
#, c-format
-msgid "Reserves not yet funded"
+msgid "Use to verify transaction in offline mode."
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:89
+#: src/paths/instance/templates/create/index.tsx:52
#, c-format
-msgid "Reserves ready"
+msgid "Template has been created"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:95
+#: src/paths/instance/templates/create/index.tsx:58
#, c-format
-msgid "add new reserve"
+msgid "Could not create template"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:143
+#: src/paths/instance/templates/list/Table.tsx:61
#, c-format
-msgid "Expires at"
+msgid "Templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:146
+#: src/paths/instance/templates/list/Table.tsx:66
#, c-format
-msgid "Initial"
+msgid "Add new templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:202
+#: src/paths/instance/templates/list/Table.tsx:127
#, c-format
-msgid "delete selected reserve from the database"
+msgid "Load more templates before the first one"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:210
+#: src/paths/instance/templates/list/Table.tsx:165
#, c-format
-msgid "authorize new tip from selected reserve"
+msgid "Delete selected templates from the database"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:237
+#: src/paths/instance/templates/list/Table.tsx:172
#, c-format
-msgid ""
-"There is no ready reserves yet, add more pressing the + sign or fund them"
+msgid "Use template to create new order"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:264
+#: src/paths/instance/templates/list/Table.tsx:175
#, c-format
-msgid "Expected Balance"
+msgid "Use template"
msgstr ""
-#: src/paths/instance/reserves/list/index.tsx:110
+#: src/paths/instance/templates/list/Table.tsx:179
#, c-format
-msgid "could not create the tip"
+msgid "Create qr code for the template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:77
+#: src/paths/instance/templates/list/Table.tsx:194
#, c-format
-msgid "should not be empty"
+msgid "Load more templates after the last one"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:93
+#: src/paths/instance/templates/list/Table.tsx:214
#, c-format
-msgid "should be greater that 0"
+msgid "There are no templates yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:96
+#: src/paths/instance/templates/list/index.tsx:91
#, c-format
-msgid "can't be empty"
+msgid "Jump to template with the given template ID"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:100
+#: src/paths/instance/templates/list/index.tsx:92
#, c-format
-msgid "to short"
+msgid "Template identification"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:108
+#: src/paths/instance/templates/list/index.tsx:132
#, c-format
-msgid "just letters and numbers from 2 to 7"
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:110
+#: src/paths/instance/templates/list/index.tsx:137
#, c-format
-msgid "size of the key should be 32"
+msgid "Failed to delete template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:137
+#: src/paths/instance/templates/list/index.tsx:153
#, c-format
-msgid "Identifier"
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:138
+#: src/paths/instance/templates/list/index.tsx:160
#, c-format
-msgid "Name of the template in URLs."
+msgid "Deleting an template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:144
+#: src/paths/instance/templates/list/index.tsx:162
#, c-format
-msgid "Describe what this template stands for"
+msgid "can't be undone"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:149
+#: src/paths/instance/templates/qr/QrPage.tsx:77
#, c-format
-msgid "Fixed summary"
+msgid "Print"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:150
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
#, c-format
msgid "If specified, this template will create order with the same summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:154
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
#, c-format
-msgid "Fixed price"
+msgid "If specified, this template will create orders with the same price"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:155
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
#, c-format
-msgid "If specified, this template will create order with the same price"
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:159
+#: src/paths/instance/templates/update/index.tsx:90
#, c-format
-msgid "Minimum age"
+msgid "Template (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:161
+#: src/paths/instance/templates/use/UsePage.tsx:58
#, c-format
-msgid "Is this contract restricted to some age?"
+msgid "An amount is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:165
+#: src/paths/instance/templates/use/UsePage.tsx:60
#, c-format
-msgid "Payment timeout"
+msgid "An order summary is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:167
+#: src/paths/instance/templates/use/UsePage.tsx:88
#, c-format
-msgid ""
-"How much time has the customer to complete the payment once the order was "
-"created."
+msgid "New order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:171
+#: src/paths/instance/templates/use/UsePage.tsx:110
#, c-format
-msgid "Verification algorithm"
+msgid "Amount of the order"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:172
+#: src/paths/instance/templates/use/UsePage.tsx:115
#, c-format
-msgid "Algorithm to use to verify transaction in offline mode"
+msgid "Order summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:180
+#: src/paths/instance/templates/use/index.tsx:125
#, c-format
-msgid "Point-of-sale key"
+msgid "Could not create order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:182
+#: src/paths/instance/token/DetailPage.tsx:57
#, c-format
-msgid "Useful to validate the purchase"
+msgid "You need your access token to perform the operation"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:196
+#: src/paths/instance/token/DetailPage.tsx:74
#, c-format
-msgid "generate random secret key"
+msgid "You are updating the access token from instance with id \"%1$s\""
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:203
+#: src/paths/instance/token/DetailPage.tsx:105
#, c-format
-msgid "random"
+msgid "This instance doesn't have authentication token."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:208
+#: src/paths/instance/token/DetailPage.tsx:106
#, c-format
-msgid "show secret key"
+msgid "You can leave it empty if there is another layer of security."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:209
+#: src/paths/instance/token/DetailPage.tsx:121
#, c-format
-msgid "hide secret key"
+msgid "Current access token"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:216
+#: src/paths/instance/token/DetailPage.tsx:126
#, c-format
-msgid "hide"
+msgid "Clearing the access token will mean public access to the instance."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:218
+#: src/paths/instance/token/DetailPage.tsx:142
#, c-format
-msgid "show"
+msgid "Clear token"
msgstr ""
-#: src/paths/instance/templates/create/index.tsx:52
+#: src/paths/instance/token/DetailPage.tsx:177
#, c-format
-msgid "could not inform template"
+msgid "Confirm change"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:54
+#: src/paths/instance/token/index.tsx:83
#, c-format
-msgid "Amount is required"
+msgid "Failed to clear token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:58
+#: src/paths/instance/token/index.tsx:109
#, c-format
-msgid "Order summary is required"
+msgid "Failed to set new token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:86
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
#, c-format
-msgid "New order for template"
+msgid "Slug"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:108
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
#, c-format
-msgid "Amount of the order"
+msgid "Token family slug to use in URLs (for internal use only)"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:113
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
#, c-format
-msgid "Order summary"
+msgid "Kind"
msgstr ""
-#: src/paths/instance/templates/use/index.tsx:92
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
#, c-format
-msgid "could not create order from template"
+msgid "Token family kind"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:131
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
#, c-format
-msgid ""
-"Here you can specify a default value for fields that are not fixed. Default "
-"values can be edited by the customer before the payment."
+msgid "User-readable token family name"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:148
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
#, c-format
-msgid "Fixed amount"
+msgid "Token family description for customers"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:149
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
#, c-format
-msgid "Default amount"
+msgid "Valid After"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:161
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
#, c-format
-msgid "Default summary"
+msgid "Token family can issue tokens after this date"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:177
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
#, c-format
-msgid "Print"
+msgid "Valid Before"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:184
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
#, c-format
-msgid "Setup TOTP"
+msgid "Token family can issue tokens until this date"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:65
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
#, c-format
-msgid "Templates"
+msgid "Duration"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:70
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
#, c-format
-msgid "add new templates"
+msgid "Validity duration of a issued token"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:142
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
#, c-format
-msgid "load more templates before the first one"
+msgid "Token familty created successfully"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:146
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
#, c-format
-msgid "load newer templates"
+msgid "Could not create token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:181
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
#, c-format
-msgid "delete selected templates from the database"
+msgid "Token Families"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:188
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
#, c-format
-msgid "use template to create new order"
+msgid "Add token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:195
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
#, c-format
-msgid "create qr code for the template"
+msgid "Go to token family update page"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:210
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
#, c-format
-msgid "load more templates after the last one"
+msgid "Remove this token family from the database"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:214
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
#, c-format
-msgid "load older templates"
+msgid ""
+"There are no token families yet, add the first one by pressing the + sign."
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:231
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
#, c-format
-msgid "There is no templates yet, add more pressing the + sign"
+msgid "Token family updated successfully"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:104
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
#, c-format
-msgid "template delete successfully"
+msgid "Could not update the token family"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:110
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
#, c-format
-msgid "could not delete the template"
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/update/index.tsx:90
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
#, c-format
-msgid "could not update template"
+msgid "Failed to delete token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:57
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
#, c-format
-msgid "should be one of '%1$s'"
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
#, c-format
-msgid "Webhook ID to use"
+msgid "Deleting a token family %1$s ."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
#, c-format
-msgid "Event"
+msgid "Token Family: %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:90
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
#, c-format
-msgid "The event of the webhook: why the webhook is used"
+msgid "Could not update token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:94
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
#, c-format
-msgid "Method"
+msgid "Check the id, does not look valid"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
#, c-format
-msgid "Method used by the webhook"
+msgid "Must have 52 characters, current %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
#, c-format
-msgid "URL"
+msgid "URL doesn't have the right format"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
#, c-format
-msgid "URL of the webhook where the customer will be redirected"
+msgid "Credited bank account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
#, c-format
-msgid "Header"
+msgid "Select an account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:106
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
#, c-format
-msgid "Header template of the webhook"
+msgid "Bank account of the merchant where the payment was received"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:111
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
#, c-format
-msgid "Body"
+msgid "Wire transfer ID"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
#, c-format
-msgid "Body template by the webhook"
+msgid ""
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
+"characters long"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:61
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
#, c-format
-msgid "Webhooks"
+msgid "Exchange URL"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:66
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
#, c-format
-msgid "add new webhooks"
+msgid ""
+"Base URL of the exchange that made the transfer, should have been in the "
+"wire transfer subject"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:137
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
#, c-format
-msgid "load more webhooks before the first one"
+msgid "Amount credited"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:141
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
#, c-format
-msgid "load newer webhooks"
+msgid "Actual amount that was wired to the merchant's bank account"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:151
+#: src/paths/instance/transfers/create/index.tsx:62
#, c-format
-msgid "Event type"
+msgid "Wire transfer informed successfully"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:176
+#: src/paths/instance/transfers/create/index.tsx:68
#, c-format
-msgid "delete selected webhook from the database"
+msgid "Could not inform transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:198
+#: src/paths/instance/transfers/list/Table.tsx:62
#, c-format
-msgid "load more webhooks after the last one"
+msgid "Transfers"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:202
+#: src/paths/instance/transfers/list/Table.tsx:67
#, c-format
-msgid "load older webhooks"
+msgid "Add new transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:219
+#: src/paths/instance/transfers/list/Table.tsx:120
#, c-format
-msgid "There is no webhooks yet, add more pressing the + sign"
+msgid "Load more transfers before the first one"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:94
+#: src/paths/instance/transfers/list/Table.tsx:133
#, c-format
-msgid "webhook delete successfully"
+msgid "Credit"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:136
#, c-format
-msgid "could not delete the webhook"
+msgid "Confirmed"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:63
+#: src/paths/instance/transfers/list/Table.tsx:139
#, c-format
-msgid "check the id, does not look valid"
+msgid "Verified"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:65
+#: src/paths/instance/transfers/list/Table.tsx:142
#, c-format
-msgid "should have 52 characters, current %1$s"
+msgid "Executed on"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:72
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "URL doesn't have the right format"
+msgid "yes"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "Credited bank account"
+msgid "no"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:158
#, c-format
-msgid "Select one account"
+msgid "never"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:101
+#: src/paths/instance/transfers/list/Table.tsx:163
#, c-format
-msgid "Bank account of the merchant where the payment was received"
+msgid "unknown"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:105
+#: src/paths/instance/transfers/list/Table.tsx:169
#, c-format
-msgid "Wire transfer ID"
+msgid "Delete selected transfer from the database"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:107
+#: src/paths/instance/transfers/list/Table.tsx:184
#, c-format
-msgid ""
-"unique identifier of the wire transfer used by the exchange, must be 52 "
-"characters long"
+msgid "Load more transfers after the last one"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/list/Table.tsx:204
#, c-format
-msgid ""
-"Base URL of the exchange that made the transfer, should have been in the "
-"wire transfer subject"
+msgid "There are no transfers yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:117
+#: src/paths/instance/transfers/list/ListPage.tsx:83
#, c-format
-msgid "Amount credited"
+msgid "All accounts"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:118
+#: src/paths/instance/transfers/list/ListPage.tsx:84
#, c-format
-msgid "Actual amount that was wired to the merchant's bank account"
+msgid "Filter by account address"
msgstr ""
-#: src/paths/instance/transfers/create/index.tsx:58
+#: src/paths/instance/transfers/list/ListPage.tsx:105
#, c-format
-msgid "could not inform transfer"
+msgid "Only show wire transfers confirmed by the merchant"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:61
+#: src/paths/instance/transfers/list/ListPage.tsx:115
#, c-format
-msgid "Transfers"
+msgid "Only show wire transfers claimed by the exchange"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:66
+#: src/paths/instance/transfers/list/ListPage.tsx:118
#, c-format
-msgid "add new transfer"
+msgid "Unverified"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:129
+#: src/paths/instance/transfers/list/index.tsx:118
#, c-format
-msgid "load more transfers before the first one"
+msgid "Wire transfer \"%1$s...\" has been deleted"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:133
+#: src/paths/instance/transfers/list/index.tsx:123
#, c-format
-msgid "load newer transfers"
+msgid "Failed to delete transfer"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:143
+#: src/paths/admin/create/CreatePage.tsx:86
#, c-format
-msgid "Credit"
+msgid "Must be business or individual"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:152
+#: src/paths/admin/create/CreatePage.tsx:104
#, c-format
-msgid "Confirmed"
+msgid "Pay delay can't be greater than wire transfer delay"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:155
+#: src/paths/admin/create/CreatePage.tsx:112
#, c-format
-msgid "Verified"
+msgid "Max 7 lines"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:158
+#: src/paths/admin/create/CreatePage.tsx:138
#, c-format
-msgid "Executed at"
+msgid "Doesn't match"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:215
#, c-format
-msgid "yes"
+msgid "Enable access control"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:216
#, c-format
-msgid "no"
+msgid "Choose if the backend server should authenticate access."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:181
+#: src/paths/admin/create/CreatePage.tsx:243
#, c-format
-msgid "unknown"
+msgid "Access control is not yet decided. This instance can't be created."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:187
+#: src/paths/admin/create/CreatePage.tsx:250
#, c-format
-msgid "delete selected transfer from the database"
+msgid "Authorization must be handled externally."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:202
+#: src/paths/admin/create/CreatePage.tsx:256
#, c-format
-msgid "load more transfer after the last one"
+msgid "Authorization is handled by the backend server."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:206
+#: src/paths/admin/create/CreatePage.tsx:274
#, c-format
-msgid "load older transfers"
+msgid "Need to complete marked fields and choose authorization method"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:223
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
#, c-format
-msgid "There is no transfer yet, add more pressing the + sign"
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:79
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "filter by account address"
+msgid "Business name"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:100
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
#, c-format
-msgid "only show wire transfers confirmed by the merchant"
+msgid "Legal name of the business represented by this instance."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:110
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
#, c-format
-msgid "only show wire transfers claimed by the exchange"
+msgid "Email"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:113
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
#, c-format
-msgid "Unverified"
+msgid "Contact email"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:69
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
#, c-format
-msgid "is not valid"
+msgid "Website URL"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:94
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
#, c-format
-msgid "is not a number"
+msgid "URL."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:96
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
#, c-format
-msgid "must be 1 or greater"
+msgid "Logo"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:107
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
#, c-format
-msgid "max 7 lines"
+msgid "Logo image."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:178
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
#, c-format
-msgid "change authorization configuration"
+msgid "Physical location of the merchant."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:217
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
#, c-format
-msgid "Need to complete marked fields and choose authorization method"
+msgid "Jurisdiction"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:82
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
#, c-format
-msgid "This is not a valid bitcoin address."
+msgid "Jurisdiction for legal disputes with the merchant."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:95
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
#, c-format
-msgid "This is not a valid Ethereum address."
+msgid "Pay transaction fee"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:118
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
#, c-format
-msgid "IBAN numbers usually have more that 4 digits"
+msgid "Assume the cost of the transaction of let the user pay for it."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:120
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
#, c-format
-msgid "IBAN numbers usually have less that 34 digits"
+msgid "Default payment delay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:128
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
#, c-format
-msgid "IBAN country code not found"
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:153
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
#, c-format
-msgid "IBAN number is not valid, checksum is wrong"
+msgid "Default wire transfer delay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:248
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
#, c-format
-msgid "Target type"
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:249
+#: src/paths/instance/update/UpdatePage.tsx:124
#, c-format
-msgid "Method to use for wire transfer"
+msgid "Instance id"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:258
+#: src/paths/instance/update/index.tsx:108
#, c-format
-msgid "Routing"
+msgid "Failed to update instance"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:259
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
#, c-format
-msgid "Routing number."
+msgid "Must be \"pay\" or \"refund\""
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:263
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
#, c-format
-msgid "Account"
+msgid "Must be one of '%1$s'"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:264
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
#, c-format
-msgid "Account number."
+msgid "Webhook ID to use"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:273
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
#, c-format
-msgid "Business Identifier Code."
+msgid "Event"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:282
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
#, c-format
-msgid "Bank Account Number."
+msgid "Pay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:292
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
#, c-format
-msgid "Unified Payment Interface."
+msgid "The event of the webhook: why the webhook is used"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:301
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
#, c-format
-msgid "Bitcoin protocol."
+msgid "Method"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:310
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
#, c-format
-msgid "Ethereum protocol."
+msgid "GET"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:319
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
#, c-format
-msgid "Interledger protocol."
+msgid "POST"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:328
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
#, c-format
-msgid "Host"
+msgid "PUT"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:329
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
#, c-format
-msgid "Bank host."
+msgid "PATCH"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:334
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
#, c-format
-msgid "Bank account."
+msgid "HEAD"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:343
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
#, c-format
-msgid "Bank account owner's name."
+msgid "Method used by the webhook"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
+#, c-format
+msgid "URL"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:370
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
#, c-format
-msgid "No accounts yet."
+msgid "URL of the webhook where the customer will be redirected"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:52
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
#, c-format
msgid ""
-"Name of the instance in URLs. The 'default' instance is special in that it "
-"is used to administer other instances."
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:58
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
#, c-format
-msgid "Business name"
+msgid "For example %1$s will be replaced with the the order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
#, c-format
-msgid "Legal name of the business represented by this instance."
+msgid "The short list of variables are:"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:64
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
#, c-format
-msgid "Email"
+msgid "order's description"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:65
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
#, c-format
-msgid "Contact email"
+msgid "order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:70
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
#, c-format
-msgid "Website URL"
+msgid "order's unique identification"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:71
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
#, c-format
-msgid "URL."
+msgid "the amount that was being refunded"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:76
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
#, c-format
-msgid "Logo"
+msgid "the reason entered by the merchant staff for granting the refund"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:77
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
#, c-format
-msgid "Logo image."
+msgid "time of the refund in nanoseconds since 1970"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:82
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
#, c-format
-msgid "Bank account"
+msgid "Http body"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:83
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
#, c-format
-msgid "URI specifying bank account for crediting revenue."
+msgid "Body template by the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:88
+#: src/paths/instance/webhooks/create/index.tsx:52
#, c-format
-msgid "Default max deposit fee"
+msgid "Webhook create successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:89
+#: src/paths/instance/webhooks/create/index.tsx:58
#, c-format
-msgid ""
-"Maximum deposit fees this merchant is willing to pay per order by default."
+msgid "Could not create the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#: src/paths/instance/webhooks/create/index.tsx:66
#, c-format
-msgid "Default max wire fee"
+msgid "Could not create webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:95
+#: src/paths/instance/webhooks/list/Table.tsx:57
#, c-format
-msgid ""
-"Maximum wire fees this merchant is willing to pay per wire transfer by "
-"default."
+msgid "Webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:100
+#: src/paths/instance/webhooks/list/Table.tsx:62
#, c-format
-msgid "Default wire fee amortization"
+msgid "Add new webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#: src/paths/instance/webhooks/list/Table.tsx:117
#, c-format
-msgid ""
-"Number of orders excess wire transfer fees will be divided by to compute per "
-"order surcharge."
+msgid "Load more webhooks before the first one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#: src/paths/instance/webhooks/list/Table.tsx:130
#, c-format
-msgid "Physical location of the merchant."
+msgid "Event type"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#: src/paths/instance/webhooks/list/Table.tsx:155
#, c-format
-msgid "Jurisdiction"
+msgid "Delete selected webhook from the database"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#: src/paths/instance/webhooks/list/Table.tsx:170
#, c-format
-msgid "Jurisdiction for legal disputes with the merchant."
+msgid "Load more webhooks after the last one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:122
+#: src/paths/instance/webhooks/list/Table.tsx:190
#, c-format
-msgid "Default payment delay"
+msgid "There are no webhooks yet, add more pressing the + sign"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:124
+#: src/paths/instance/webhooks/list/index.tsx:88
#, c-format
-msgid ""
-"Time customers have to pay an order before the offer expires by default."
+msgid "Webhook delete successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:129
+#: src/paths/instance/webhooks/list/index.tsx:93
#, c-format
-msgid "Default wire transfer delay"
+msgid "Could not delete the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:130
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
#, c-format
-msgid ""
-"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
-"enabling it to aggregate smaller payments into larger wire transfers and "
-"reducing wire fees."
+msgid "Header"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:164
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
#, c-format
-msgid "Instance id"
+msgid "Header template of the webhook"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:173
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
#, c-format
-msgid "Change the authorization method use for this instance."
+msgid "Body"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:182
+#: src/paths/instance/webhooks/update/index.tsx:88
#, c-format
-msgid "Manage access token"
+msgid "Webhook updated"
msgstr ""
-#: src/paths/instance/update/index.tsx:112
+#: src/paths/instance/webhooks/update/index.tsx:94
#, c-format
-msgid "Failed to create instance"
+msgid "Could not update webhook"
msgstr ""
-#: src/components/exception/login.tsx:74
+#: src/paths/settings/index.tsx:73
#, c-format
-msgid "Login required"
+msgid "Language"
msgstr ""
-#: src/components/exception/login.tsx:80
+#: src/paths/settings/index.tsx:89
#, c-format
-msgid "Please enter your access token."
+msgid "Advance order creation"
msgstr ""
-#: src/components/exception/login.tsx:108
+#: src/paths/settings/index.tsx:90
#, c-format
-msgid "Access Token"
+msgid "Shows more options in the order creation form"
msgstr ""
-#: src/InstanceRoutes.tsx:171
+#: src/paths/settings/index.tsx:94
#, c-format
-msgid "The request to the backend take too long and was cancelled"
+msgid "Advance instance settings"
msgstr ""
-#: src/InstanceRoutes.tsx:172
+#: src/paths/settings/index.tsx:95
#, c-format
-msgid "Diagnostic from %1$s is \"%2$s\""
+msgid "Shows more options in the instance settings form"
msgstr ""
-#: src/InstanceRoutes.tsx:178
+#: src/paths/settings/index.tsx:100
#, c-format
-msgid "The backend reported a problem: HTTP status #%1$s"
+msgid "Date format"
msgstr ""
-#: src/InstanceRoutes.tsx:179
+#: src/paths/settings/index.tsx:118
#, c-format
-msgid "Diagnostic from %1$s is '%2$s'"
+msgid "How the date is going to be displayed"
msgstr ""
-#: src/InstanceRoutes.tsx:196
+#: src/paths/settings/index.tsx:121
#, c-format
-msgid "Access denied"
+msgid "Developer mode"
msgstr ""
-#: src/InstanceRoutes.tsx:197
+#: src/paths/settings/index.tsx:122
#, c-format
-msgid "The access token provided is invalid."
+msgid ""
+"Shows more options and tools which are not intended for general audience."
msgstr ""
-#: src/InstanceRoutes.tsx:212
+#: src/paths/instance/categories/list/Table.tsx:133
#, c-format
-msgid "No 'default' instance configured yet."
+msgid "Total products"
msgstr ""
-#: src/InstanceRoutes.tsx:213
+#: src/paths/instance/categories/list/Table.tsx:164
#, c-format
-msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgid "Delete selected category from the database"
msgstr ""
-#: src/InstanceRoutes.tsx:630
+#: src/paths/instance/categories/list/Table.tsx:199
#, c-format
-msgid "The access token provided is invalid"
+msgid "There are no categories yet, add more pressing the + sign"
msgstr ""
-#: src/InstanceRoutes.tsx:664
+#: src/paths/instance/categories/list/index.tsx:90
#, c-format
-msgid "Hide for today"
+msgid "Category delete successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:82
+#: src/paths/instance/categories/list/index.tsx:95
#, c-format
-msgid "Instance"
+msgid "Could not delete the category"
msgstr ""
-#: src/components/menu/SideBar.tsx:91
+#: src/paths/instance/categories/create/CreatePage.tsx:75
#, c-format
-msgid "Settings"
-msgstr "Impostazioni"
+msgid "Category name"
+msgstr ""
-#: src/components/menu/SideBar.tsx:167
+#: src/paths/instance/categories/create/index.tsx:53
#, c-format
-msgid "Connection"
+msgid "Category added successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:209
+#: src/paths/instance/categories/create/index.tsx:59
#, c-format
-msgid "New"
+msgid "Could not add category"
msgstr ""
-#: src/components/menu/SideBar.tsx:219
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
#, c-format
-msgid "List"
+msgid "Id:"
msgstr ""
-#: src/components/menu/SideBar.tsx:234
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
#, c-format
-msgid "Log out"
+msgid "Name of the category"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
+#, c-format
+msgid "Products"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:71
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
#, c-format
-msgid "Check your token is valid"
+msgid "Search by product description or id"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:90
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
#, c-format
-msgid "Couldn't access the server."
+msgid "Products that this category will list."
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:91
+#: src/paths/instance/categories/update/index.tsx:93
#, c-format
-msgid "Could not infer instance id from url %1$s"
+msgid "Could not update category"
msgstr ""
-#: src/Application.tsx:104
+#: src/paths/instance/categories/update/index.tsx:95
#, c-format
-msgid "Server not found"
+msgid "Category id is unknown"
msgstr ""
-#: src/Application.tsx:118
+#: src/Routing.tsx:665
#, c-format
-msgid "Server response with an error code"
+msgid "Without this the merchant backend will refuse to create new orders."
msgstr ""
-#: src/Application.tsx:120
+#: src/Routing.tsx:675
#, c-format
-msgid "Got message %1$s from %2$s"
+msgid "Hide for today"
msgstr ""
-#: src/Application.tsx:131
+#: src/Routing.tsx:711
#, c-format
-msgid "Response from server is unreadable, http status: %1$s"
+msgid "KYC verification needed"
msgstr ""
-#: src/Application.tsx:144
+#: src/Routing.tsx:715
#, c-format
-msgid "Unexpected Error"
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
msgstr ""
-#: src/components/form/InputArray.tsx:101
+#: src/components/menu/SideBar.tsx:167
#, c-format
-msgid "The value %1$s is invalid for a payment url"
+msgid "Configuration"
msgstr ""
-#: src/components/form/InputArray.tsx:110
+#: src/components/menu/SideBar.tsx:206
+#, c-format
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: src/components/menu/SideBar.tsx:216
#, c-format
-msgid "add element to the list"
+msgid "Access token"
msgstr ""
-#: src/components/form/InputArray.tsx:112
+#: src/components/menu/SideBar.tsx:224
#, c-format
-msgid "add"
+msgid "Connection"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:233
+#, c-format
+msgid "Interface"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:274
+#, c-format
+msgid "List"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:293
+#, c-format
+msgid "Log out"
+msgstr ""
+
+#: src/paths/admin/create/index.tsx:54
+#, c-format
+msgid "Failed to create instance"
+msgstr ""
+
+#: src/Application.tsx:208
+#, c-format
+msgid "checking compatibility with server..."
+msgstr ""
+
+#: src/Application.tsx:217
+#, c-format
+msgid "Contacting the server failed"
+msgstr ""
+
+#: src/Application.tsx:229
+#, c-format
+msgid "The server version is not supported"
+msgstr ""
+
+#: src/Application.tsx:230
+#, c-format
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
msgstr ""
#: src/components/form/InputSecured.tsx:37
@@ -2731,12 +3671,22 @@ msgstr ""
msgid "Changing"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:87
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr ""
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, c-format
+msgid "Business Name"
+msgstr ""
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
#, c-format
msgid "Order ID"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:101
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
#, c-format
msgid "Payment URL"
msgstr ""
diff --git a/packages/merchant-backoffice-ui/src/i18n/strings.ts b/packages/merchant-backoffice-ui/src/i18n/strings.ts
index 65dc41358..565daa85a 100644
--- a/packages/merchant-backoffice-ui/src/i18n/strings.ts
+++ b/packages/merchant-backoffice-ui/src/i18n/strings.ts
@@ -17,21 +17,2199 @@
/*eslint quote-props: ["error", "consistent"]*/
export const strings: {[s: string]: any} = {};
-strings['de'] = {
- "domain": "messages",
+strings['uk'] = {
"locale_data": {
"messages": {
"": {
"domain": "messages",
- "plural_forms": "nplurals=2; plural=(n != 1);",
- "lang": ""
+ "plural_forms": "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;",
+ "lang": "uk"
},
- "Cancel": [
+ "The request reached a timeout, check your connection.": [
+ ""
+ ],
+ "The request was cancelled.": [
""
],
+ "A lot of request were made to the same server and this action was throttled.": [
+ ""
+ ],
+ "The response of the request is malformed.": [
+ ""
+ ],
+ "Could not complete the request due to a network problem.": [
+ ""
+ ],
+ "Unexpected request error.": [
+ "Несподівана помилка"
+ ],
+ "Unexpected error.": [
+ "Несподівана помилка"
+ ],
+ "Cancel": [
+ "Скасувати"
+ ],
"%1$s": [
+ "%1$s"
+ ],
+ "Close": [
+ "Закрити"
+ ],
+ "Continue": [
+ "Продовжити"
+ ],
+ "Clear": [
+ "Очистити"
+ ],
+ "Confirm": [
+ "Підтвердити"
+ ],
+ "Required": [
+ "обовʼязково"
+ ],
+ "Letter must be a JSON string": [
+ ""
+ ],
+ "JSON string is invalid": [
+ ""
+ ],
+ "Import": [
+ ""
+ ],
+ "Importing an account from the bank": [
+ ""
+ ],
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
+ ""
+ ],
+ "Account information": [
+ "Додаткова інформація"
+ ],
+ "Correct form": [
+ ""
+ ],
+ "Comparing account details": [
+ ""
+ ],
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
+ ""
+ ],
+ "Field": [
+ ""
+ ],
+ "In the form": [
+ ""
+ ],
+ "Reported": [
+ ""
+ ],
+ "Type": [
+ ""
+ ],
+ "IBAN": [
+ ""
+ ],
+ "Address": [
+ "Адреса"
+ ],
+ "Host": [
+ "Хост"
+ ],
+ "Account id": [
+ "Рахунок"
+ ],
+ "Owner's name": [
+ "Назва бізнесу"
+ ],
+ "Account": [
+ "Рахунок"
+ ],
+ "Bank host": [
+ "Хост банку."
+ ],
+ "Bank account": [
+ "Банківський рахунок"
+ ],
+ "BIC": [
+ ""
+ ],
+ "Ok": [
+ ""
+ ],
+ "Validate bank account: %1$s": [
+ "Зарахований банківський рахунок"
+ ],
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
+ ""
+ ],
+ "Step 1:": [
+ ""
+ ],
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
+ ""
+ ],
+ "Subject": [
+ "Призначення"
+ ],
+ "Step 2:": [
+ ""
+ ],
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
+ ""
+ ],
+ "Receiver name": [
+ "Дата доставки"
+ ],
+ "Step 3:": [
+ ""
+ ],
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
+ ""
+ ],
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
+ ""
+ ],
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
+ ""
+ ],
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
+ ""
+ ],
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
+ ""
+ ],
+ "Deleting an instance %1$s .": [
+ ""
+ ],
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
+ ""
+ ],
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
+ ""
+ ],
+ "Purging an instance %1$s .": [
+ ""
+ ],
+ "Is not the same as the current access token": [
+ "не співпадає з поточним токеном доступу"
+ ],
+ "Can't be the same as the old token": [
+ "не може бути таким самим, як старий токен"
+ ],
+ "Is not the same": [
+ "не співпадає"
+ ],
+ "You are updating the access token from instance with id %1$s": [
+ "Ви оновлюєте токен доступу з інстанції з ідентифікатором %1$s"
+ ],
+ "Old access token": [
+ "Старий токен доступу"
+ ],
+ "Access token currently in use": [
+ "токен доступу, який зараз використовується"
+ ],
+ "New access token": [
+ "Новий токен доступу"
+ ],
+ "Next access token to be used": [
+ "наступний токен доступу, який буде використано"
+ ],
+ "Repeat access token": [
+ "Повторіть токен доступу"
+ ],
+ "Confirm the same access token": [
+ "підтвердити той самий токен доступу"
+ ],
+ "Clearing the access token will mean public access to the instance": [
+ "Видалення токена доступу означатиме публічний доступ до системи"
+ ],
+ "Can't be the same as the old access token": [
+ "не може бути таким самим, як старий токен доступу"
+ ],
+ "You are setting the access token for the new instance": [
+ "Ви встановлюєте токен доступу для нової інстанції"
+ ],
+ "With external authorization method no check will be done by the merchant backend": [
+ "З зовнішнім методом авторизації перевірка не буде виконуватися бекендом продавця"
+ ],
+ "Set external authorization": [
+ "Встановити зовнішню авторизацію"
+ ],
+ "Set access token": [
+ "Встановити токен доступу"
+ ],
+ "Operation in progress...": [
+ "Операція виконується..."
+ ],
+ "The operation will be automatically canceled after %1$s seconds": [
+ "Операція буде автоматично скасована через %1$s секунд"
+ ],
+ "Your password is incorrect": [
+ ""
+ ],
+ "Your instance not found": [
+ "замовлення не знайдено"
+ ],
+ "Login required": [
+ "Потрібен вхід"
+ ],
+ "Please enter your access token for %1$s.": [
+ "Будь ласка, введіть ваш токен доступу для %1$s."
+ ],
+ "Access Token": [
+ "Токен доступу"
+ ],
+ "Instances": [
+ "Інстанції"
+ ],
+ "Delete": [
+ "Видалити"
+ ],
+ "Add new instance": [
+ "додати нову інстанцію"
+ ],
+ "ID": [
+ "Ідентифікатор"
+ ],
+ "Name": [
+ "Назва"
+ ],
+ "Edit": [
+ "Редагувати"
+ ],
+ "Purge": [
+ "Очистити"
+ ],
+ "There is no instances yet, add more pressing the + sign": [
+ "Ще немає інстанцій, додайте більше, натиснувши знак +"
+ ],
+ "Only show active instances": [
+ "Показувати тільки активні інстанції"
+ ],
+ "Active": [
+ "Активні"
+ ],
+ "Only show deleted instances": [
+ "Показувати тільки видалені інстанції"
+ ],
+ "Deleted": [
+ "Видалено"
+ ],
+ "Show all instances": [
+ "Показати всі інстанції"
+ ],
+ "All": [
+ "Всі"
+ ],
+ "Instance \"%1$s\" (ID: %2$s) has been deleted": [
+ "Інстанція \"%1$s\" (ID: %2$s) була видалена"
+ ],
+ "Failed to delete instance": [
+ "Не вдалося видалити інстанцію"
+ ],
+ "Instance '%1$s' (ID: %2$s) has been purge": [
+ "Інстанція '%1$s' (ID: %2$s) була деактивована"
+ ],
+ "Failed to purge instance": [
+ "Не вдалося очистити інстанцію"
+ ],
+ "Loading...": [
+ "Завантаження..."
+ ],
+ "This is not a valid bitcoin address.": [
+ "Це недійсна адреса біткойн."
+ ],
+ "This is not a valid Ethereum address.": [
+ "Це недійсна адреса Ethereum."
+ ],
+ "This is not a valid host.": [
+ "Це недійсна адреса біткойн."
+ ],
+ "IBAN numbers usually have more that 4 digits": [
+ "Номера IBAN зазвичай мають більше 4-ьох цифр"
+ ],
+ "IBAN numbers usually have less that 34 digits": [
+ "Номера IBAN зазвичай мають менше 34-ьох цифр"
+ ],
+ "IBAN country code not found": [
+ "Код країни IBAN не знайдено"
+ ],
+ "IBAN number is invalid, checksum is wrong": [
+ "Номер IBAN не коректний, контрольна сума не сходиться"
+ ],
+ "Choose one...": [
+ "Виберіть одну..."
+ ],
+ "Method to use for wire transfer": [
+ "Метод для використання при банківському переказі"
+ ],
+ "Routing": [
+ "Маршрутизація"
+ ],
+ "Routing number.": [
+ "Номер маршрутизації."
+ ],
+ "Account number.": [
+ "Номер рахунку."
+ ],
+ "Code": [
+ "Код"
+ ],
+ "Business Identifier Code.": [
+ "Код ідентифікації бізнесу."
+ ],
+ "International Bank Account Number.": [
+ "Номер банківського рахунку."
+ ],
+ "Unified Payment Interface.": [
+ "Уніфікований інтерфейс платежів."
+ ],
+ "Bitcoin protocol.": [
+ "Протокол біткойн."
+ ],
+ "Ethereum protocol.": [
+ "Протокол Ethereum."
+ ],
+ "Interledger protocol.": [
+ "Протокол Interledger."
+ ],
+ "Bank host.": [
+ "Хост банку."
+ ],
+ "Without scheme and may include subpath:": [
+ ""
+ ],
+ "Bank account.": [
+ "Банківський рахунок."
+ ],
+ "Legal name of the person holding the account.": [
+ "Офіційне ім'я власника рахунку."
+ ],
+ "It should match the bank account name.": [
+ ""
+ ],
+ "Invalid url": [
+ "недійсний формат"
+ ],
+ "URL must end with a '/'": [
+ ""
+ ],
+ "URL must not contain params": [
+ ""
+ ],
+ "URL must not hash param": [
+ ""
+ ],
+ "The request to check the revenue API failed.": [
+ ""
+ ],
+ "Server replied with \"bad request\".": [
+ "Відповідь сервера з кодом помилки."
+ ],
+ "Unauthorized, check credentials.": [
+ ""
+ ],
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
+ ""
+ ],
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
+ ""
+ ],
+ "Account:": [
+ "Рахунок:"
+ ],
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
+ ""
+ ],
+ "Endpoint URL": [
+ ""
+ ],
+ "From where the merchant can download information about incoming wire transfers to this account": [
+ ""
+ ],
+ "Auth type": [
+ "Тип події"
+ ],
+ "Choose the authentication type for the account info URL": [
+ ""
+ ],
+ "Without authentication": [
+ ""
+ ],
+ "With password": [
+ ""
+ ],
+ "With token": [
+ "Створити токен"
+ ],
+ "Do not change": [
+ "URL обмінника"
+ ],
+ "Username": [
+ ""
+ ],
+ "Username to access the account information.": [
+ ""
+ ],
+ "Password": [
+ ""
+ ],
+ "Password to access the account information.": [
+ ""
+ ],
+ "Token": [
+ ""
+ ],
+ "Access token to access the account information.": [
+ ""
+ ],
+ "Match": [
+ ""
+ ],
+ "Check where the information match against the server info.": [
+ ""
+ ],
+ "Not verified": [
+ "Неперевірений"
+ ],
+ "Last test was ok": [
+ ""
+ ],
+ "Last test failed": [
+ ""
+ ],
+ "Compare info from server with account form": [
+ ""
+ ],
+ "Test": [
+ ""
+ ],
+ "Need to complete marked fields": [
+ "Необхідно заповнити позначені поля"
+ ],
+ "Confirm operation": [
+ "Підтверджено"
+ ],
+ "Account details": [
+ "Адреса рахунку"
+ ],
+ "Import from bank": [
+ ""
+ ],
+ "Could not create account": [
+ "не вдалося створити продукт"
+ ],
+ "No 'default' instance configured yet.": [
+ "Інстанція 'default' ще не налаштована."
+ ],
+ "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Створіть інстанцію 'default', щоб почати використовувати бекофіс продавця."
+ ],
+ "Bank accounts": [
+ "Банківський рахунок"
+ ],
+ "Add new account": [
+ "Зарахований банківський рахунок"
+ ],
+ "Wire method: Bitcoin": [
+ "Метод переказу"
+ ],
+ "Sewgit 1": [
+ ""
+ ],
+ "Sewgit 2": [
+ ""
+ ],
+ "Delete selected accounts from the database": [
+ "видалити вибраний переказ з бази даних"
+ ],
+ "Wire method: x-taler-bank": [
+ "Метод переказу"
+ ],
+ "Account name": [
+ "Номер рахунку."
+ ],
+ "Wire method: IBAN": [
+ "Метод переказу"
+ ],
+ "Other accounts": [
+ "Цільовий рахунок"
+ ],
+ "Path": [
+ ""
+ ],
+ "There is no accounts yet, add more pressing the + sign": [
+ "Продуктів ще немає, додайте більше, натиснувши знак +"
+ ],
+ "You need to associate a bank account to receive revenue.": [
+ "URI, що вказує на банківський рахунок для зарахування доходу."
+ ],
+ "Without this the you won't be able to create new orders.": [
+ "використовувати шаблон для створення нового замовлення."
+ ],
+ "Bank account delete successfully": [
+ "Банківський рахунок успішно видалено"
+ ],
+ "Could not delete the bank account": [
+ "Не вдалося видалити банківський рахунок"
+ ],
+ "Could not update account": [
+ "Не вдалося оновити обліковий запис"
+ ],
+ "Could not delete account": [
+ "Не вдалося видалити обліковий запис"
+ ],
+ "Pending KYC verification": [
+ "Очікування перевірки KYC"
+ ],
+ "Exchange": [
+ "Exchange"
+ ],
+ "Reason": [
+ "Причина"
+ ],
+ "Pending KYC process, click here to complete": [
+ ""
+ ],
+ "The exchange require a account verification.": [
+ ""
+ ],
+ "Http Status": [
+ "HTTP статус"
+ ],
+ "No pending kyc verification!": [
+ "Немає очікуваних перевірок KYC!"
+ ],
+ "Change value to unknown date": [
+ "змінити значення на невідому дату"
+ ],
+ "Change value to empty": [
+ "змінити значення на порожнє"
+ ],
+ "Change value to never": [
+ "змінити значення на ніколи"
+ ],
+ "Never": [
+ "ніколи"
+ ],
+ "days": [
+ "дні"
+ ],
+ "hours": [
+ "години"
+ ],
+ "minutes": [
+ "хвилини"
+ ],
+ "seconds": [
+ "секунди"
+ ],
+ "Forever": [
+ "назавжди"
+ ],
+ "%1$sM": [
+ "%1$sМ"
+ ],
+ "%1$sY": [
+ "%1$sР"
+ ],
+ "%1$sd": [
+ "%1$sдн."
+ ],
+ "%1$sh": [
+ "%1$sг"
+ ],
+ "%1$smin": [
+ "%1$sхв"
+ ],
+ "%1$ssec": [
+ "%1$sсек"
+ ],
+ "Country": [
+ "Країна"
+ ],
+ "Building number": [
+ "Номер будинку"
+ ],
+ "Building name": [
+ "Назва будинку"
+ ],
+ "Street": [
+ "Вулиця"
+ ],
+ "Post code": [
+ "Поштовий індекс"
+ ],
+ "Town location": [
+ "Область міста"
+ ],
+ "Town": [
+ "Місто"
+ ],
+ "District": [
+ "Район"
+ ],
+ "Country subdivision": [
+ "Регіон країни"
+ ],
+ "Description": [
+ "Опис"
+ ],
+ "Enter description or id": [
+ "Введіть ідентифікатор замовлення"
+ ],
+ "no match found with that description or id": [
+ "продукти з таким описом не знайдено"
+ ],
+ "You must enter a valid product identifier.": [
+ "Ви повинні ввести дійсний ідентифікатор продукту."
+ ],
+ "Quantity must be greater than 0!": [
+ "Кількість має бути більше 0!"
+ ],
+ "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
+ "Ця кількість перевищує залишок на складі. Наразі на складі залишилося лише %1$s одиниць, які не зарезервовані."
+ ],
+ "Search product": [
+ "нова ціна для продукту"
+ ],
+ "Quantity": [
+ "Кількість"
+ ],
+ "How many products will be added": [
+ "скільки продуктів буде додано"
+ ],
+ "Add from inventory": [
+ "Додати зі складу"
+ ],
+ "Image must be smaller than 1 MB": [
+ "Зображення повинно бути меншим за 1 МБ"
+ ],
+ "Add": [
+ "Додати"
+ ],
+ "Remove": [
+ "Видалити"
+ ],
+ "Invalid": [
+ "недійсний"
+ ],
+ "This product has %1$s applicable taxes configured.": [
+ ""
+ ],
+ "No taxes configured for this product.": [
+ "Податки для цього продукту не налаштовані."
+ ],
+ "Amount": [
+ "Сума"
+ ],
+ "Taxes can be in currencies that differ from the main currency used by the merchant.": [
+ "Податки можуть бути в валютах, що відрізняються від основної валюти, яку використовує продавець."
+ ],
+ "Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.": [
+ "Введіть валюту та значення, розділені двокрапкою, наприклад, &quot;USD:2.3&quot;."
+ ],
+ "Legal name of the tax, e.g. VAT or import duties.": [
+ "Офіційна назва податку, наприклад, ПДВ або імпортні мита."
+ ],
+ "Add tax to the tax list": [
+ "додати податок до списку податків"
+ ],
+ "Describe and add a product that is not in the inventory list": [
+ "опишіть і додайте продукт, якого немає в списку інвентарю"
+ ],
+ "Add custom product": [
+ "Додати новий продукт"
+ ],
+ "Complete information of the product": [
+ "Повна інформація про продукт"
+ ],
+ "Must be a number": [
+ "не є числом"
+ ],
+ "Must be grater than 0": [
+ "має бути більше 0"
+ ],
+ "Image": [
+ "Зображення"
+ ],
+ "Photo of the product.": [
+ "фото продукту."
+ ],
+ "Full product description.": [
+ "повний опис продукту."
+ ],
+ "Unit": [
+ "Одиниця"
+ ],
+ "Name of the product unit.": [
+ "назва одиниці продукту."
+ ],
+ "Price": [
+ "Ціна"
+ ],
+ "Amount in the current currency.": [
+ "сума в поточній валюті."
+ ],
+ "How many products will be added.": [
+ "скільки продуктів буде додано."
+ ],
+ "Taxes": [
+ "Податки"
+ ],
+ "Unit price": [
+ "ціна за одиницю"
+ ],
+ "Total price": [
+ "Загальна ціна"
+ ],
+ "Must be greater than 0": [
+ "має бути більше 0"
+ ],
+ "Refund deadline can't be before pay deadline": [
+ "термін повернення не може бути раніше терміну оплати"
+ ],
+ "Wire transfer deadline can't be before refund deadline": [
+ "термін банківського переказу не може бути раніше терміну повернення"
+ ],
+ "Wire transfer deadline can't be before pay deadline": [
+ "термін банківського переказу не може бути раніше терміну оплати"
+ ],
+ "Must have a refund deadline": [
+ "повинен бути встановлений термін повернення"
+ ],
+ "Auto refund can't be after refund deadline": [
+ "автоматичне повернення не може бути після терміну повернення"
+ ],
+ "Must be in the future": [
+ "повинно бути в майбутньому"
+ ],
+ "Simple": [
+ ""
+ ],
+ "Advanced": [
+ ""
+ ],
+ "Manage products in order": [
+ "Керування продуктами в замовленні"
+ ],
+ "%1$s products with a total price of %2$s.": [
+ "%1$s товарів із загальною ціною %2$s."
+ ],
+ "Manage list of products in the order.": [
+ "Керування списком продуктів у замовленні."
+ ],
+ "Remove this product from the order.": [
+ "Видалити цей продукт із замовлення."
+ ],
+ "Total product price added up": [
+ "загальна сума продукту"
+ ],
+ "Amount to be paid by the customer": [
+ "Сума, яку має сплатити клієнт"
+ ],
+ "Order price": [
+ "Ціна замовлення"
+ ],
+ "Final order price": [
+ "кінцева ціна замовлення"
+ ],
+ "Summary": [
+ "Підсумок"
+ ],
+ "Title of the order to be shown to the customer": [
+ "Назва замовлення, яку буде показано клієнту"
+ ],
+ "Shipping and Fulfillment": [
+ "Доставка та виконання"
+ ],
+ "Delivery date": [
+ "Дата доставки"
+ ],
+ "Deadline for physical delivery assured by the merchant.": [
+ "Термін фізичної доставки, гарантований продавцем."
+ ],
+ "Location": [
+ "Місцезнаходження"
+ ],
+ "Address where the products will be delivered": [
+ "адреса, за якою будуть доставлені продукти"
+ ],
+ "Fulfillment URL": [
+ "URL виконання"
+ ],
+ "URL to which the user will be redirected after successful payment.": [
+ "URL, на який користувача буде перенаправлено після успішної оплати."
+ ],
+ "Taler payment options": [
+ "Опції оплати Taler"
+ ],
+ "Override default Taler payment settings for this order": [
+ "Перевизначити стандартні налаштування оплати Taler для цього замовлення"
+ ],
+ "Payment time": [
+ "Тайм-аут оплати"
+ ],
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
+ "Термін, до якого клієнт повинен оплатити пропозицію, перш ніж вона закінчиться. Продукти з інвентарю будуть зарезервовані до цього терміну."
+ ],
+ "Default": [
+ "Сума за замовчуванням"
+ ],
+ "Refund time": [
+ "Повернення здійснено"
+ ],
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
+ "Час, до якого замовлення може бути повернене продавцем."
+ ],
+ "Wire transfer time": [
+ "Ідентифікатор банківського переказу"
+ ],
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
+ "Термін, до якого обмінник повинен здійснити банківський переказ."
+ ],
+ "Auto-refund time": [
+ "Затримка автоматичного повернення"
+ ],
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "Час, до якого гаманець автоматично перевірятиме повернення коштів без взаємодії з користувачем."
+ ],
+ "Maximum fee": [
+ "Максимальна комісія за переказ"
+ ],
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "Максимальна комісія за депозит, яку продавець готовий покрити для цього замовлення. Вищі комісії за депозит повинні бути повністю покриті споживачем."
+ ],
+ "Create token": [
+ "Створити токен"
+ ],
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
+ ""
+ ],
+ "Minimum age required": [
+ "Мінімальний вік"
+ ],
+ "Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products": [
+ "Будь-яке значення більше 0 обмежуватиме монети, які можуть бути використані для оплати цього контракту. Якщо порожнє, вікове обмеження визначатиметься продуктами"
+ ],
+ "Min age defined by the producs is %1$s": [
+ "Мінімальний вік, визначений продуктами, становить %1$s"
+ ],
+ "No product with age restriction in this order": [
+ ""
+ ],
+ "Additional information": [
+ "Додаткова інформація"
+ ],
+ "Custom information to be included in the contract for this order.": [
+ "Спеціальна інформація, яка буде включена в контракт для цього замовлення."
+ ],
+ "You must enter a value in JavaScript Object Notation (JSON).": [
+ "Ви повинні ввести значення у форматі JavaScript Object Notation (JSON)."
+ ],
+ "Custom field name": [
+ "Назва будинку"
+ ],
+ "Disabled": [
+ ""
+ ],
+ "No deadline": [
+ "Термін повернення"
+ ],
+ "Deadline at %1$s": [
+ ""
+ ],
+ "Could not create order": [
+ "не вдалося створити резерв"
+ ],
+ "No exchange would accept a payment because of KYC requirements.": [
+ ""
+ ],
+ "No more stock for product with id \"%1$s\".": [
+ ""
+ ],
+ "Orders": [
+ "Замовлення"
+ ],
+ "Create order": [
+ "створити замовлення"
+ ],
+ "Load first page": [
+ ""
+ ],
+ "Date": [
+ "Дата"
+ ],
+ "Refund": [
+ "Повернення"
+ ],
+ "copy url": [
+ "скопіювати url"
+ ],
+ "Load more orders after the last one": [
+ "завантажити більше переказів після останнього"
+ ],
+ "Load next page": [
+ ""
+ ],
+ "No orders have been found matching your query!": [
+ "Замовлення, що відповідають вашому запиту, не знайдено!"
+ ],
+ "Duplicated": [
+ "дубльовано"
+ ],
+ "This value exceed the refundable amount": [
+ "ця сума перевищує суму, що підлягає поверненню"
+ ],
+ "Amount to be refunded": [
+ "сума до повернення"
+ ],
+ "Max refundable:": [
+ "Макс. сума для повернення:"
+ ],
+ "Requested by the customer": [
+ "запитано клієнтом"
+ ],
+ "Other": [
+ "інше"
+ ],
+ "Why this order is being refunded": [
+ "чому це замовлення повертається"
+ ],
+ "More information to give context": [
+ "додаткова інформація для надання контексту"
+ ],
+ "Contract Terms": [
+ "Умови контракту"
+ ],
+ "Human-readable description of the whole purchase": [
+ "читабельний опис всієї покупки"
+ ],
+ "Total price for the transaction": [
+ "загальна ціна за транзакцію"
+ ],
+ "URL for this purchase": [
+ "URL для цієї покупки"
+ ],
+ "Max fee": [
+ "Максимальна комісія"
+ ],
+ "Maximum total deposit fee accepted by the merchant for this contract": [
+ "максимальна загальна комісія за депозит, прийнята продавцем для цього контракту"
+ ],
+ "Created at": [
+ "Створено о"
+ ],
+ "Time when this contract was generated": [
+ "час, коли цей контракт було згенеровано"
+ ],
+ "Refund deadline": [
+ "Термін повернення"
+ ],
+ "After this deadline has passed no refunds will be accepted": [
+ "після цього терміну повернення не приймаються"
+ ],
+ "Payment deadline": [
+ "Термін оплати"
+ ],
+ "After this deadline, the merchant won't accept payments for the contract": [
+ "після цього терміну продавець не прийматиме платежі за контрактом"
+ ],
+ "Wire transfer deadline": [
+ "Термін банківського переказу"
+ ],
+ "Transfer deadline for the exchange": [
+ "термін переказу для обмінника"
+ ],
+ "Time indicating when the order should be delivered": [
+ "час, що вказує, коли замовлення має бути доставлене"
+ ],
+ "Where the order will be delivered": [
+ "куди буде доставлене замовлення"
+ ],
+ "Auto-refund delay": [
+ "Затримка автоматичного повернення"
+ ],
+ "How long the wallet should try to get an automatic refund for the purchase": [
+ "скільки часу гаманець повинен намагатися отримати автоматичне повернення за покупку"
+ ],
+ "Extra info": [
+ "Додаткова інформація"
+ ],
+ "Extra data that is only interpreted by the merchant frontend": [
+ "додаткові дані, які інтерпретуються лише фронтендом продавця"
+ ],
+ "Order": [
+ "Замовлення"
+ ],
+ "Claimed": [
+ "отримано"
+ ],
+ "Claimed at": [
+ "отримано о"
+ ],
+ "Timeline": [
+ "Хронологія"
+ ],
+ "Payment details": [
+ "Деталі оплати"
+ ],
+ "Order status": [
+ "Статус замовлення"
+ ],
+ "Product list": [
+ "Список продуктів"
+ ],
+ "Paid": [
+ "Оплачено"
+ ],
+ "Wired": [
+ "перераховано"
+ ],
+ "Refunded": [
+ "Повернено"
+ ],
+ "Refund order": [
+ "замовлення на повернення"
+ ],
+ "Not refundable": [
+ "не підлягає поверненню"
+ ],
+ "Next event in": [
+ ""
+ ],
+ "Refunded amount": [
+ "Повернена сума"
+ ],
+ "Refund taken": [
+ "Повернення здійснено"
+ ],
+ "Status URL": [
+ "URL статусу"
+ ],
+ "Refund URI": [
+ "URI повернення"
+ ],
+ "Unpaid": [
+ "неоплачено"
+ ],
+ "Pay at": [
+ "оплачено о"
+ ],
+ "Order status URL": [
+ "URL статусу замовлення"
+ ],
+ "Payment URI": [
+ "URI оплати"
+ ],
+ "Unknown order status. This is an error, please contact the administrator.": [
+ "Невідомий статус замовлення. Це помилка, будь ласка, зв'яжіться з адміністратором."
+ ],
+ "Back": [
+ "Назад"
+ ],
+ "Refund created successfully": [
+ "повернення успішно створено"
+ ],
+ "Could not create the refund": [
+ "не вдалося створити повернення"
+ ],
+ "There are pending KYC requirements.": [
+ ""
+ ],
+ "Missing id": [
+ ""
+ ],
+ "Not found": [
+ "замовлення не знайдено"
+ ],
+ "Select date to show nearby orders": [
+ "виберіть дату, щоб показати найближчі замовлення"
+ ],
+ "Only show paid orders": [
+ "показувати лише оплачені замовлення"
+ ],
+ "New": [
+ "Новий"
+ ],
+ "Only show orders with refunds": [
+ "показувати лише замовлення з поверненнями"
+ ],
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "показувати лише замовлення, де клієнти заплатили, але банківські перекази від постачальника платежів ще не виконані"
+ ],
+ "Not wired": [
+ "Не перераховано"
+ ],
+ "Completed": [
+ "Видалено"
+ ],
+ "Remove all filters": [
+ "видалити всі фільтри"
+ ],
+ "Clear date filter": [
+ "очистити фільтр дати"
+ ],
+ "Jump to date (%1$s)": [
+ ""
+ ],
+ "Jump to order with the given product ID": [
+ "перейти до замовлення з зазначеним ідентифікатором"
+ ],
+ "Order id": [
+ "ідентифікатор замовлення"
+ ],
+ "Invalid. Only characters and numbers": [
+ ""
+ ],
+ "Just letters and numbers from 2 to 7": [
+ "лише літери та цифри від 2 до 7"
+ ],
+ "Size of the key must be 32": [
+ "розмір ключа повинен бути 32"
+ ],
+ "Internal id on the system": [
+ ""
+ ],
+ "Useful to identify the device physically": [
+ ""
+ ],
+ "Verification algorithm": [
+ "Алгоритм перевірки"
+ ],
+ "Algorithm to use to verify transaction in offline mode": [
+ "Алгоритм для використання для перевірки транзакції в офлайн-режимі"
+ ],
+ "Device key": [
+ ""
+ ],
+ "Be sure to be very hard to guess or use the random generator": [
+ ""
+ ],
+ "Your device need to have exactly the same value": [
+ ""
+ ],
+ "Generate random secret key": [
+ "згенерувати випадковий секретний ключ"
+ ],
+ "Random": [
+ "випадковий"
+ ],
+ "You can scan the next QR code with your device or save the key before continuing.": [
+ ""
+ ],
+ "Device added successfully": [
+ "повернення успішно створено"
+ ],
+ "Could not add device": [
+ "не вдалося створити резерв"
+ ],
+ "OTP Devices": [
+ ""
+ ],
+ "Add new devices": [
+ "додати новий резерв"
+ ],
+ "Load more devices before the first one": [
+ "завантажити більше шаблонів до першого"
+ ],
+ "Delete selected devices from the database": [
+ "видалити вибраний резерв з бази даних"
+ ],
+ "Load more devices after the last one": [
+ "завантажити більше шаблонів після останнього"
+ ],
+ "There is no devices yet, add more pressing the + sign": [
+ "Ще немає інстанцій, додайте більше, натиснувши знак +"
+ ],
+ "Device delete successfully": [
+ "шаблон успішно видалено"
+ ],
+ "Could not delete the device": [
+ "не вдалося видалити продукт"
+ ],
+ "Device:": [
+ ""
+ ],
+ "Not modified": [
+ "Не перераховано"
+ ],
+ "Change key": [
+ ""
+ ],
+ "Could not update template": [
+ "не вдалося оновити шаблон"
+ ],
+ "Template id is unknown": [
+ ""
+ ],
+ "The provided information is inconsistent with the current state of the template": [
+ ""
+ ],
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
+ "натисніть тут, щоб налаштувати запас продукту, залиште як є, і бекенд не буде контролювати запас."
+ ],
+ "Manage stock": [
+ "Керування запасами"
+ ],
+ "This product has been configured without stock control": [
+ "цей продукт налаштований без контролю запасів"
+ ],
+ "Infinite": [
+ "Нескінченний"
+ ],
+ "Lost can't be greater than current and incoming (max %1$s)": [
+ "втрати не можуть бути більшими за поточні та прибуваючі (макс %1$s)"
+ ],
+ "Incoming": [
+ "Прибуття"
+ ],
+ "Lost": [
+ "Втрачено"
+ ],
+ "Current": [
+ "Поточний"
+ ],
+ "Remove stock control for this product": [
+ "видалити контроль запасів для цього продукту"
+ ],
+ "without stock": [
+ "без запасу"
+ ],
+ "Next restock": [
+ "Наступне поповнення"
+ ],
+ "Warehouse address": [
+ "Адреса рахунку"
+ ],
+ "Add element to the list": [
+ "додати елемент до списку"
+ ],
+ "Invalid amount": [
+ "Фіксована сума"
+ ],
+ "Product identification to use in URLs (for internal use only).": [
+ "ідентифікація продукту для використання в URL (тільки для внутрішнього використання)."
+ ],
+ "Illustration of the product for customers.": [
+ "ілюстрація продукту для клієнтів."
+ ],
+ "Product description for customers.": [
+ "опис продукту для клієнтів."
+ ],
+ "Age restriction": [
+ "Обмежений за віком"
+ ],
+ "Is this product restricted for customer below certain age?": [
+ "цей продукт обмежений для клієнтів молодше певного віку?"
+ ],
+ "Minimum age of the customer": [
+ "Мінімальний вік"
+ ],
+ "Unit name": [
+ "Одиниця"
+ ],
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
+ "одиниця, що описує кількість проданого продукту (наприклад, 2 кілограми, 5 літрів, 3 предмети, 5 метрів) для клієнтів."
+ ],
+ "Example: kg, items or liters": [
+ ""
+ ],
+ "Price per unit": [
+ ""
+ ],
+ "Sale price for customers, including taxes, for above units of the product.": [
+ "ціна продажу для клієнтів, включаючи податки, за вищезазначені одиниці продукту."
+ ],
+ "Stock": [
+ "Запас"
+ ],
+ "Inventory for products with finite supply (for internal use only).": [
+ "інвентаризація продукту для продуктів з обмеженим запасом (тільки для внутрішнього використання)"
+ ],
+ "Taxes included in the product price, exposed to customers.": [
+ "податки, включені в ціну продукту, показані клієнтам"
+ ],
+ "Categories": [
+ ""
+ ],
+ "Search by category description or id": [
+ "шукати продукти за їхнім описом або ідентифікатором"
+ ],
+ "Categories where this product will be listed on.": [
+ "адреса, за якою будуть доставлені продукти."
+ ],
+ "Product created successfully": [
+ "Продукт успішно створено"
+ ],
+ "Could not create product": [
+ "Не вдалося створити продукт"
+ ],
+ "Inventory": [
+ ""
+ ],
+ "Add product to inventory": [
+ "додати продукт до інвентарю"
+ ],
+ "Sales": [
+ ""
+ ],
+ "Sold": [
+ "Продано"
+ ],
+ "Free": [
+ ""
+ ],
+ "Go to product update page": [
+ "перейти на сторінку оновлення продукту"
+ ],
+ "Update": [
+ "Оновити"
+ ],
+ "Remove this product from the database": [
+ "видалити цей продукт з бази даних"
+ ],
+ "Load more products after the last one": [
+ "завантажити більше шаблонів після останнього"
+ ],
+ "Update the product with new price": [
+ "оновити продукт з новою ціною"
+ ],
+ "Update product with new price": [
+ "оновити продукт з новою ціною"
+ ],
+ "Confirm update": [
+ "Підтверджено"
+ ],
+ "Add more elements to the inventory": [
+ "додати більше елементів до інвентарю"
+ ],
+ "Report elements lost in the inventory": [
+ "повідомити про втрату елементів в інвентарі"
+ ],
+ "New price for the product": [
+ "нова ціна для продукту"
+ ],
+ "The are value with errors": [
+ "є значення з помилками"
+ ],
+ "Update product with new stock and price": [
+ "оновити продукт з новим запасом і ціною"
+ ],
+ "There is no products yet, add more pressing the + sign": [
+ "Продуктів ще немає, додайте більше, натиснувши знак +"
+ ],
+ "Jump to product with the given product ID": [
+ "перейти до замовлення з зазначеним ідентифікатором"
+ ],
+ "Product id": [
+ "Ідентифікатор продукту"
+ ],
+ "Product updated successfully": [
+ "продукт успішно оновлено"
+ ],
+ "Could not update the product": [
+ "не вдалося оновити продукт"
+ ],
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
+ "Інстанція \"%1$s\" (ID: %2$s) була видалена"
+ ],
+ "Could not delete the product": [
+ "не вдалося видалити продукт"
+ ],
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
+ ""
+ ],
+ "Deleting an product can't be undone.": [
+ ""
+ ],
+ "Product id:": [
+ "Ідентифікатор продукту:"
+ ],
+ "Product (ID: %1$s) has been updated": [
+ "Продукт (ID: %1$s) оновлено"
+ ],
+ "Could not update product": [
+ "не вдалося оновити продукт"
+ ],
+ "Invalid. only characters and numbers": [
+ ""
+ ],
+ "Must be greater that 0": [
+ "має бути більше 0"
+ ],
+ "To short": [
+ "занадто короткий"
+ ],
+ "Identifier": [
+ "Ідентифікатор"
+ ],
+ "Name of the template in URLs.": [
+ "Назва шаблону в URL."
+ ],
+ "Describe what this template stands for": [
+ "Опишіть, що представляє цей шаблон"
+ ],
+ "If specified, this template will create order with the same summary": [
+ "Якщо вказано, цей шаблон створить замовлення з однаковим підсумком"
+ ],
+ "Summary is editable": [
+ ""
+ ],
+ "Allow the user to change the summary.": [
+ ""
+ ],
+ "If specified, this template will create order with the same price": [
+ "Якщо вказано, цей шаблон створить замовлення з однаковою ціною"
+ ],
+ "Amount is editable": [
+ "Зарахована сума"
+ ],
+ "Allow the user to select the amount to pay.": [
+ ""
+ ],
+ "Currency is editable": [
+ ""
+ ],
+ "Allow the user to change currency.": [
+ ""
+ ],
+ "Supported currencies": [
+ ""
+ ],
+ "Supported currencies: %1$s": [
+ ""
+ ],
+ "Minimum age": [
+ "Мінімальний вік"
+ ],
+ "Is this contract restricted to some age?": [
+ "Чи обмежений цей контракт за віком?"
+ ],
+ "Payment timeout": [
+ "Тайм-аут оплати"
+ ],
+ "How much time has the customer to complete the payment once the order was created.": [
+ "Скільки часу у клієнта для завершення оплати після створення замовлення."
+ ],
+ "OTP device": [
+ ""
+ ],
+ "Use to verify transaction while offline.": [
+ "Алгоритм для використання для перевірки транзакції в офлайн-режимі."
+ ],
+ "No OTP device.": [
+ ""
+ ],
+ "Add one first": [
+ ""
+ ],
+ "No device": [
+ ""
+ ],
+ "Use to verify transaction in offline mode.": [
+ "Алгоритм для використання для перевірки транзакції в офлайн-режимі."
+ ],
+ "Template has been created": [
+ ""
+ ],
+ "Could not create template": [
+ "не вдалося оновити шаблон"
+ ],
+ "Templates": [
+ "Шаблони"
+ ],
+ "Add new templates": [
+ "додати нові шаблони"
+ ],
+ "Load more templates before the first one": [
+ "завантажити більше шаблонів до першого"
+ ],
+ "Delete selected templates from the database": [
+ "видалити вибрані шаблони з бази даних"
+ ],
+ "Use template to create new order": [
+ "використовувати шаблон для створення нового замовлення"
+ ],
+ "Use template": [
+ "додати нові шаблони"
+ ],
+ "Create qr code for the template": [
+ "створити QR-код для шаблону"
+ ],
+ "Load more templates after the last one": [
+ "завантажити більше шаблонів після останнього"
+ ],
+ "There is no templates yet, add more pressing the + sign": [
+ "Шаблонів ще немає, додайте більше, натиснувши знак +"
+ ],
+ "Jump to template with the given template ID": [
+ "перейти до замовлення з зазначеним ідентифікатором"
+ ],
+ "Template identification": [
+ ""
+ ],
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
+ "Інстанція \"%1$s\" (ID: %2$s) була видалена"
+ ],
+ "Failed to delete template": [
+ "Не вдалося видалити інстанцію"
+ ],
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
+ ""
+ ],
+ "Deleting an template": [
+ "завантажити новіші шаблони"
+ ],
+ "can't be undone": [
+ "не може бути порожнім"
+ ],
+ "Print": [
+ "Друк"
+ ],
+ "Too short": [
+ "занадто короткий"
+ ],
+ "Template (ID: %1$s) has been updated": [
+ "Шаблон (ID: %1$s) оновлено"
+ ],
+ "Amount is required": [
+ "Сума обов'язкова"
+ ],
+ "Order summary is required": [
+ "Підсумок замовлення обов'язковий"
+ ],
+ "New order for template": [
+ "Нове замовлення для шаблону"
+ ],
+ "Amount of the order": [
+ "Сума замовлення"
+ ],
+ "Order summary": [
+ "Підсумок замовлення"
+ ],
+ "Could not create order from template": [
+ "не вдалося створити замовлення з шаблону"
+ ],
+ "You need your access token to perform the operation": [
+ "Ви встановлюєте токен доступу для нової інстанції"
+ ],
+ "You are updating the access token from instance with id \"%1$s\"": [
+ "Ви оновлюєте токен доступу з інстанції з ідентифікатором %1$s"
+ ],
+ "This instance doesn't have authentication token.": [
""
],
+ "You can leave it empty if there is another layer of security.": [
+ ""
+ ],
+ "Current access token": [
+ "Встановити токен доступу"
+ ],
+ "Clearing the access token will mean public access to the instance.": [
+ "Видалення токена доступу означатиме публічний доступ до системи."
+ ],
+ "Clear token": [
+ "Чіткий токен"
+ ],
+ "Confirm change": [
+ "Підтвердити зміну"
+ ],
+ "Failed to clear token": [
+ "Не вдалося очистити токен"
+ ],
+ "Failed to set new token": [
+ "Не вдалося встановити новий токен"
+ ],
+ "Slug": [
+ ""
+ ],
+ "Token family slug to use in URLs (for internal use only)": [
+ "ідентифікація продукту для використання в URL (тільки для внутрішнього використання)"
+ ],
+ "Kind": [
+ ""
+ ],
+ "Token family kind": [
+ ""
+ ],
+ "User-readable token family name": [
+ ""
+ ],
+ "Token family description for customers": [
+ "опис продукту для клієнтів"
+ ],
+ "Valid After": [
+ "Дійсний до"
+ ],
+ "Token family can issue tokens after this date": [
+ ""
+ ],
+ "Valid Before": [
+ "недійсний формат"
+ ],
+ "Token family can issue tokens until this date": [
+ ""
+ ],
+ "Duration": [
+ "Термін дії"
+ ],
+ "Validity duration of a issued token": [
+ ""
+ ],
+ "Token familty created successfully": [
+ "повернення успішно створено"
+ ],
+ "Could not create token family": [
+ "не вдалося створити чайові"
+ ],
+ "Token Families": [
+ ""
+ ],
+ "Add token family": [
+ ""
+ ],
+ "Go to token family update page": [
+ "перейти на сторінку оновлення продукту"
+ ],
+ "Remove this token family from the database": [
+ "видалити цей продукт з бази даних"
+ ],
+ "There are no token families yet, add the first one by pressing the + sign.": [
+ "Шаблонів ще немає, додайте більше, натиснувши знак +."
+ ],
+ "Token family updated successfully": [
+ "Сімейство токенів успішно оновлено"
+ ],
+ "Could not update the token family": [
+ "Не вдалося оновити сімейство токенів"
+ ],
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
+ "Сімейство токенів \"%1$s\" (SLUG: %2$s) видалено"
+ ],
+ "Failed to delete token family": [
+ "Не вдалося видалити сімейство токенів"
+ ],
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
+ "Якщо ви видалите сімейство токенів %1$s (Slug: %2$s), всі випущені токени стануть недійсними."
+ ],
+ "Deleting a token family %1$s .": [
+ "Видалення сімейства токенів %1$s ."
+ ],
+ "Token Family: %1$s": [
+ "Сімейство токенів: %1$s"
+ ],
+ "Token familty updated successfully": [
+ "Сімейство токенів успішно оновлено"
+ ],
+ "Could not update token family": [
+ "Не вдалося оновити сімейство токенів"
+ ],
+ "Check the id, does not look valid": [
+ "перевірте ідентифікатор, він виглядає недійсним"
+ ],
+ "Must have 52 characters, current %1$s": [
+ "повинно бути 52 символи, поточний %1$s"
+ ],
+ "URL doesn't have the right format": [
+ "URL має неправильний формат"
+ ],
+ "Credited bank account": [
+ "Зарахований банківський рахунок"
+ ],
+ "Select one account": [
+ "Виберіть один рахунок"
+ ],
+ "Bank account of the merchant where the payment was received": [
+ "Банківський рахунок продавця, на який було отримано платіж"
+ ],
+ "Wire transfer ID": [
+ "Ідентифікатор банківського переказу"
+ ],
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "унікальний ідентифікатор банківського переказу, що використовується обмінником, має бути довжиною 52 символи"
+ ],
+ "Exchange URL": [
+ "URL обмінника"
+ ],
+ "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
+ "Основний URL обмінника, який здійснив переказ, має бути в призначенні банківського переказу"
+ ],
+ "Amount credited": [
+ "Зарахована сума"
+ ],
+ "Actual amount that was wired to the merchant's bank account": [
+ "Фактична сума, що була переказана на банківський рахунок продавця"
+ ],
+ "Wire transfer informed successfully": [
+ "повернення успішно створено"
+ ],
+ "Could not inform transfer": [
+ "не вдалося повідомити про переказ"
+ ],
+ "Transfers": [
+ "Перекази"
+ ],
+ "Add new transfer": [
+ "додати новий переказ"
+ ],
+ "Load more transfers before the first one": [
+ "завантажити більше переказів до першого"
+ ],
+ "Credit": [
+ "Кредит"
+ ],
+ "Confirmed": [
+ "Підтверджено"
+ ],
+ "Verified": [
+ "Перевірено"
+ ],
+ "Executed at": [
+ "Виконано о"
+ ],
+ "yes": [
+ "так"
+ ],
+ "no": [
+ "ні"
+ ],
+ "never": [
+ "ніколи"
+ ],
+ "unknown": [
+ "невідомо"
+ ],
+ "Delete selected transfer from the database": [
+ "видалити вибраний переказ з бази даних"
+ ],
+ "Load more transfers after the last one": [
+ "завантажити більше переказів після останнього"
+ ],
+ "There is no transfer yet, add more pressing the + sign": [
+ "Переказів ще немає, додайте більше, натиснувши знак +"
+ ],
+ "All accounts": [
+ "Рахунок"
+ ],
+ "Filter by account address": [
+ "фільтрувати за адресою рахунку"
+ ],
+ "Only show wire transfers confirmed by the merchant": [
+ "показувати лише перекази, підтверджені продавцем"
+ ],
+ "Only show wire transfers claimed by the exchange": [
+ "показувати лише перекази, заявлені обмінником"
+ ],
+ "Unverified": [
+ "Неперевірений"
+ ],
+ "Wire transfer \"%1$s...\" has been deleted": [
+ "Банківський переказ \"%1$s...\" видалено"
+ ],
+ "Failed to delete transfer": [
+ "Не вдалося видалити переказ"
+ ],
+ "Must be business or individual": [
+ ""
+ ],
+ "Pay delay can't be greater than wire transfer delay": [
+ ""
+ ],
+ "Max 7 lines": [
+ "максимум 7 рядків"
+ ],
+ "Doesn't match": [
+ ""
+ ],
+ "Enable access control": [
+ "Управління токеном доступу"
+ ],
+ "Choose if the backend server should authenticate access.": [
+ ""
+ ],
+ "Access control is not yet decided. This instance can't be created.": [
+ ""
+ ],
+ "Authorization must be handled externally.": [
+ ""
+ ],
+ "Authorization is handled by the backend server.": [
+ ""
+ ],
+ "Need to complete marked fields and choose authorization method": [
+ "Необхідно заповнити позначені поля та вибрати метод авторизації"
+ ],
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Назва інстанції в URL. Інстанція 'default' є особливою, оскільки використовується для адміністрування інших інстанцій."
+ ],
+ "Business name": [
+ "Назва бізнесу"
+ ],
+ "Legal name of the business represented by this instance.": [
+ "Юридична назва бізнесу, який представляє ця інстанція."
+ ],
+ "Email": [
+ "Email"
+ ],
+ "Contact email": [
+ "Контактний email"
+ ],
+ "Website URL": [
+ "URL вебсайту"
+ ],
+ "URL.": [
+ "URL."
+ ],
+ "Logo": [
+ "Логотип"
+ ],
+ "Logo image.": [
+ "Зображення логотипу."
+ ],
+ "Physical location of the merchant.": [
+ "Фізичне розташування продавця."
+ ],
+ "Jurisdiction": [
+ "Юрисдикція"
+ ],
+ "Jurisdiction for legal disputes with the merchant.": [
+ "Юрисдикція для правових спорів з продавцем."
+ ],
+ "Pay transaction fee": [
+ ""
+ ],
+ "Assume the cost of the transaction of let the user pay for it.": [
+ ""
+ ],
+ "Default payment delay": [
+ "Затримка оплати за замовчуванням"
+ ],
+ "Time customers have to pay an order before the offer expires by default.": [
+ "Час, який мають клієнти для оплати замовлення до закінчення терміну дії пропозиції за замовчуванням."
+ ],
+ "Default wire transfer delay": [
+ "Затримка банківського переказу за замовчуванням"
+ ],
+ "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
+ "Максимальний час, на який обмінник може затримати переказ коштів продавцю, дозволяючи йому об'єднувати менші платежі у більші банківські перекази та знижуючи комісії за переказ."
+ ],
+ "Instance id": [
+ "Ідентифікатор інстанції"
+ ],
+ "Failed to update instance": [
+ "Не вдалося створити інстанцію"
+ ],
+ "Must be \"pay\" or \"refund\"": [
+ ""
+ ],
+ "Must be one of '%1$s'": [
+ "повинно бути одним із '%1$s'"
+ ],
+ "Webhook ID to use": [
+ "ID вебхука для використання"
+ ],
+ "Event": [
+ "Подія"
+ ],
+ "Pay": [
+ ""
+ ],
+ "The event of the webhook: why the webhook is used": [
+ "Подія вебхука: чому використовується вебхук"
+ ],
+ "Method": [
+ "Метод"
+ ],
+ "GET": [
+ ""
+ ],
+ "POST": [
+ ""
+ ],
+ "PUT": [
+ ""
+ ],
+ "PATCH": [
+ ""
+ ],
+ "HEAD": [
+ ""
+ ],
+ "Method used by the webhook": [
+ "Метод, що використовується вебхуком"
+ ],
+ "URL": [
+ "URL"
+ ],
+ "URL of the webhook where the customer will be redirected": [
+ "URL вебхука, куди буде перенаправлений клієнт"
+ ],
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
+ ""
+ ],
+ "For example %1$s will be replaced with the the order's price": [
+ ""
+ ],
+ "The short list of variables are:": [
+ ""
+ ],
+ "order's description": [
+ "опис"
+ ],
+ "order's price": [
+ "Ціна замовлення"
+ ],
+ "order's unique identification": [
+ ""
+ ],
+ "the amount that was being refunded": [
+ "сума до повернення"
+ ],
+ "the reason entered by the merchant staff for granting the refund": [
+ ""
+ ],
+ "time of the refund in nanoseconds since 1970": [
+ ""
+ ],
+ "Http body": [
+ ""
+ ],
+ "Body template by the webhook": [
+ "Шаблон тіла вебхука"
+ ],
+ "Webhook create successfully": [
+ "вебхук успішно видалено"
+ ],
+ "Could not create the webhook": [
+ "не вдалося видалити вебхук"
+ ],
+ "Could not create webhook": [
+ "не вдалося видалити вебхук"
+ ],
+ "Webhooks": [
+ "Вебхуки"
+ ],
+ "Add new webhooks": [
+ "додати нові вебхуки"
+ ],
+ "Load more webhooks before the first one": [
+ "завантажити більше вебхуків до першого"
+ ],
+ "Event type": [
+ "Тип події"
+ ],
+ "Delete selected webhook from the database": [
+ "видалити вибраний вебхук з бази даних"
+ ],
+ "Load more webhooks after the last one": [
+ "завантажити більше вебхуків після останнього"
+ ],
+ "There is no webhooks yet, add more pressing the + sign": [
+ "Вебхуків ще немає, додайте більше, натиснувши знак +"
+ ],
+ "Webhook delete successfully": [
+ "вебхук успішно видалено"
+ ],
+ "Could not delete the webhook": [
+ "не вдалося видалити вебхук"
+ ],
+ "Header": [
+ "Заголовок"
+ ],
+ "Header template of the webhook": [
+ "Шаблон заголовка вебхука"
+ ],
+ "Body": [
+ "Тіло"
+ ],
+ "Webhook updated": [
+ "ID вебхука для використання"
+ ],
+ "Could not update webhook": [
+ "не вдалося видалити вебхук"
+ ],
+ "Language": [
+ ""
+ ],
+ "Advance order creation": [
+ ""
+ ],
+ "Shows more options in the order creation form": [
+ ""
+ ],
+ "Advance instance settings": [
+ ""
+ ],
+ "Shows more options in the instance settings form": [
+ ""
+ ],
+ "Date format": [
+ "недійсний формат"
+ ],
+ "How the date is going to be displayed": [
+ ""
+ ],
+ "Developer mode": [
+ ""
+ ],
+ "Shows more options and tools which are not intended for general audience.": [
+ ""
+ ],
+ "Total products": [
+ "Загальна ціна"
+ ],
+ "Delete selected category from the database": [
+ "видалити вибраний переказ з бази даних"
+ ],
+ "There is no categories yet, add more pressing the + sign": [
+ "Шаблонів ще немає, додайте більше, натиснувши знак +"
+ ],
+ "Category delete successfully": [
+ "шаблон успішно видалено"
+ ],
+ "Could not delete the category": [
+ "не вдалося видалити шаблон"
+ ],
+ "Category name": [
+ ""
+ ],
+ "Category added successfully": [
+ "шаблон успішно видалено"
+ ],
+ "Could not add category": [
+ "не вдалося створити продукт"
+ ],
+ "Id:": [
+ ""
+ ],
+ "Name of the category": [
+ "Назва категорії"
+ ],
+ "Products": [
+ "Товари"
+ ],
+ "Search by product description or id": [
+ "шукати продукти за їхнім описом або ідентифікатором"
+ ],
+ "Products that this category will list.": [
+ ""
+ ],
+ "Could not update category": [
+ "не вдалося оновити шаблон"
+ ],
+ "Category id is unknown": [
+ ""
+ ],
+ "Without this the merchant backend will refuse to create new orders.": [
+ ""
+ ],
+ "Hide for today": [
+ "Сховати на сьогодні"
+ ],
+ "KYC verification needed": [
+ "Очікування перевірки KYC"
+ ],
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
+ ""
+ ],
+ "Configuration": [
+ "Термін дії"
+ ],
+ "Settings": [
+ "Налаштування"
+ ],
+ "Access token": [
+ "Токен доступу"
+ ],
+ "Connection": [
+ "З'єднання"
+ ],
+ "Interface": [
+ ""
+ ],
+ "List": [
+ "Список"
+ ],
+ "Log out": [
+ "Вийти"
+ ],
+ "Failed to create instance": [
+ "Не вдалося створити інстанцію"
+ ],
+ "checking compatibility with server...": [
+ ""
+ ],
+ "Contacting the server failed": [
+ "Не вдалося підключитися до сервера."
+ ],
+ "The server version is not supported": [
+ ""
+ ],
+ "Supported version \"%1$s\", server version \"%2$s\".": [
+ ""
+ ],
+ "Deleting": [
+ "Видалення"
+ ],
+ "Changing": [
+ "Зміна"
+ ],
+ "Manage access token": [
+ "Управління токеном доступу"
+ ],
+ "Business Name": [
+ "Назва бізнесу"
+ ],
+ "Order ID": [
+ "Ідентифікатор замовлення"
+ ],
+ "Payment URL": [
+ "URL оплати"
+ ]
+ }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;",
+ "lang": "uk",
+ "completeness": 76
+};
+
+strings['tr'] = {
+ "locale_data": {
+ "messages": {
+ "": {
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "tr"
+ },
+ "The request reached a timeout, check your connection.": [
+ ""
+ ],
+ "The request was cancelled.": [
+ ""
+ ],
+ "A lot of request were made to the same server and this action was throttled.": [
+ ""
+ ],
+ "The response of the request is malformed.": [
+ ""
+ ],
+ "Could not complete the request due to a network problem.": [
+ ""
+ ],
+ "Unexpected request error.": [
+ ""
+ ],
+ "Unexpected error.": [
+ ""
+ ],
+ "Cancel": [
+ "İptal"
+ ],
+ "%1$s": [
+ "%1$s"
+ ],
"Close": [
""
],
@@ -44,16 +2222,139 @@ strings['de'] = {
"Confirm": [
""
],
- "is not the same as the current access token": [
+ "Required": [
+ ""
+ ],
+ "Letter must be a JSON string": [
+ ""
+ ],
+ "JSON string is invalid": [
+ ""
+ ],
+ "Import": [
+ ""
+ ],
+ "Importing an account from the bank": [
+ ""
+ ],
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
+ ""
+ ],
+ "Account information": [
+ ""
+ ],
+ "Correct form": [
+ ""
+ ],
+ "Comparing account details": [
+ ""
+ ],
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
+ ""
+ ],
+ "Field": [
+ ""
+ ],
+ "In the form": [
+ ""
+ ],
+ "Reported": [
+ ""
+ ],
+ "Type": [
+ ""
+ ],
+ "IBAN": [
+ ""
+ ],
+ "Address": [
+ ""
+ ],
+ "Host": [
+ ""
+ ],
+ "Account id": [
+ "Hesap"
+ ],
+ "Owner's name": [
+ ""
+ ],
+ "Account": [
+ "Hesap"
+ ],
+ "Bank host": [
+ "Banka hesabı"
+ ],
+ "Bank account": [
+ "Banka hesabı"
+ ],
+ "BIC": [
+ ""
+ ],
+ "Ok": [
+ ""
+ ],
+ "Validate bank account: %1$s": [
+ ""
+ ],
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
+ ""
+ ],
+ "Step 1:": [
+ ""
+ ],
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
+ ""
+ ],
+ "Subject": [
+ "Konu"
+ ],
+ "Step 2:": [
+ ""
+ ],
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
+ ""
+ ],
+ "Receiver name": [
+ "Teslim tarihi"
+ ],
+ "Step 3:": [
+ ""
+ ],
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
+ ""
+ ],
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
+ ""
+ ],
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
+ ""
+ ],
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
+ ""
+ ],
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
+ ""
+ ],
+ "Deleting an instance %1$s .": [
+ ""
+ ],
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
+ ""
+ ],
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
""
],
- "cannot be empty": [
+ "Purging an instance %1$s .": [
""
],
- "cannot be the same as the old token": [
+ "Is not the same as the current access token": [
""
],
- "is not the same": [
+ "Can't be the same as the old token": [
+ ""
+ ],
+ "Is not the same": [
""
],
"You are updating the access token from instance with id %1$s": [
@@ -62,25 +2363,25 @@ strings['de'] = {
"Old access token": [
""
],
- "access token currently in use": [
+ "Access token currently in use": [
""
],
"New access token": [
""
],
- "next access token to be used": [
+ "Next access token to be used": [
""
],
"Repeat access token": [
""
],
- "confirm the same access token": [
+ "Confirm the same access token": [
""
],
"Clearing the access token will mean public access to the instance": [
""
],
- "cannot be the same as the old access token": [
+ "Can't be the same as the old access token": [
""
],
"You are setting the access token for the new instance": [
@@ -101,13 +2402,28 @@ strings['de'] = {
"The operation will be automatically canceled after %1$s seconds": [
""
],
+ "Your password is incorrect": [
+ ""
+ ],
+ "Your instance not found": [
+ ""
+ ],
+ "Login required": [
+ ""
+ ],
+ "Please enter your access token for %1$s.": [
+ ""
+ ],
+ "Access Token": [
+ ""
+ ],
"Instances": [
""
],
"Delete": [
""
],
- "add new instance": [
+ "Add new instance": [
""
],
"ID": [
@@ -149,94 +2465,358 @@ strings['de'] = {
"Failed to delete instance": [
""
],
- "Instance '%1$s' (ID: %2$s) has been disabled": [
+ "Instance '%1$s' (ID: %2$s) has been purge": [
""
],
"Failed to purge instance": [
""
],
- "Pending KYC verification": [
+ "Loading...": [
""
],
- "Timed out": [
+ "This is not a valid bitcoin address.": [
""
],
- "Exchange": [
+ "This is not a valid Ethereum address.": [
+ ""
+ ],
+ "This is not a valid host.": [
+ ""
+ ],
+ "IBAN numbers usually have more that 4 digits": [
+ ""
+ ],
+ "IBAN numbers usually have less that 34 digits": [
+ ""
+ ],
+ "IBAN country code not found": [
+ ""
+ ],
+ "IBAN number is invalid, checksum is wrong": [
+ ""
+ ],
+ "Choose one...": [
""
],
- "Target account": [
+ "Method to use for wire transfer": [
+ ""
+ ],
+ "Routing": [
+ ""
+ ],
+ "Routing number.": [
""
],
- "KYC URL": [
+ "Account number.": [
""
],
"Code": [
""
],
+ "Business Identifier Code.": [
+ ""
+ ],
+ "International Bank Account Number.": [
+ ""
+ ],
+ "Unified Payment Interface.": [
+ ""
+ ],
+ "Bitcoin protocol.": [
+ ""
+ ],
+ "Ethereum protocol.": [
+ ""
+ ],
+ "Interledger protocol.": [
+ ""
+ ],
+ "Bank host.": [
+ ""
+ ],
+ "Without scheme and may include subpath:": [
+ ""
+ ],
+ "Bank account.": [
+ ""
+ ],
+ "Legal name of the person holding the account.": [
+ ""
+ ],
+ "It should match the bank account name.": [
+ ""
+ ],
+ "Invalid url": [
+ "Geçerlilik"
+ ],
+ "URL must end with a '/'": [
+ ""
+ ],
+ "URL must not contain params": [
+ ""
+ ],
+ "URL must not hash param": [
+ ""
+ ],
+ "The request to check the revenue API failed.": [
+ ""
+ ],
+ "Server replied with \"bad request\".": [
+ ""
+ ],
+ "Unauthorized, check credentials.": [
+ ""
+ ],
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
+ ""
+ ],
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
+ ""
+ ],
+ "Account:": [
+ "Hesap"
+ ],
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
+ ""
+ ],
+ "Endpoint URL": [
+ ""
+ ],
+ "From where the merchant can download information about incoming wire transfers to this account": [
+ ""
+ ],
+ "Auth type": [
+ ""
+ ],
+ "Choose the authentication type for the account info URL": [
+ ""
+ ],
+ "Without authentication": [
+ ""
+ ],
+ "With password": [
+ ""
+ ],
+ "With token": [
+ ""
+ ],
+ "Do not change": [
+ ""
+ ],
+ "Username": [
+ ""
+ ],
+ "Username to access the account information.": [
+ ""
+ ],
+ "Password": [
+ ""
+ ],
+ "Password to access the account information.": [
+ ""
+ ],
+ "Token": [
+ ""
+ ],
+ "Access token to access the account information.": [
+ ""
+ ],
+ "Match": [
+ ""
+ ],
+ "Check where the information match against the server info.": [
+ ""
+ ],
+ "Not verified": [
+ ""
+ ],
+ "Last test was ok": [
+ ""
+ ],
+ "Last test failed": [
+ ""
+ ],
+ "Compare info from server with account form": [
+ ""
+ ],
+ "Test": [
+ ""
+ ],
+ "Need to complete marked fields": [
+ ""
+ ],
+ "Confirm operation": [
+ "Kasaba konumu"
+ ],
+ "Account details": [
+ "Hesap"
+ ],
+ "Import from bank": [
+ ""
+ ],
+ "Could not create account": [
+ ""
+ ],
+ "No 'default' instance configured yet.": [
+ ""
+ ],
+ "Create a 'default' instance to begin using the merchant backoffice.": [
+ ""
+ ],
+ "Bank accounts": [
+ "Banka hesabı"
+ ],
+ "Add new account": [
+ "Banka hesabı"
+ ],
+ "Wire method: Bitcoin": [
+ ""
+ ],
+ "Sewgit 1": [
+ ""
+ ],
+ "Sewgit 2": [
+ ""
+ ],
+ "Delete selected accounts from the database": [
+ ""
+ ],
+ "Wire method: x-taler-bank": [
+ ""
+ ],
+ "Account name": [
+ "Hesap"
+ ],
+ "Wire method: IBAN": [
+ ""
+ ],
+ "Other accounts": [
+ "Banka hesabı"
+ ],
+ "Path": [
+ ""
+ ],
+ "There is no accounts yet, add more pressing the + sign": [
+ ""
+ ],
+ "You need to associate a bank account to receive revenue.": [
+ ""
+ ],
+ "Without this the you won't be able to create new orders.": [
+ ""
+ ],
+ "Bank account delete successfully": [
+ ""
+ ],
+ "Could not delete the bank account": [
+ ""
+ ],
+ "Could not update account": [
+ ""
+ ],
+ "Could not delete account": [
+ ""
+ ],
+ "Pending KYC verification": [
+ ""
+ ],
+ "Exchange": [
+ ""
+ ],
+ "Reason": [
+ ""
+ ],
+ "Pending KYC process, click here to complete": [
+ ""
+ ],
+ "The exchange require a account verification.": [
+ ""
+ ],
"Http Status": [
""
],
"No pending kyc verification!": [
""
],
- "change value to unknown date": [
+ "Change value to unknown date": [
""
],
- "change value to empty": [
+ "Change value to empty": [
""
],
- "clear": [
+ "Change value to never": [
""
],
- "change value to never": [
+ "Never": [
""
],
- "never": [
+ "days": [
""
],
- "Country": [
+ "hours": [
""
],
- "Address": [
+ "minutes": [
""
],
- "Building number": [
+ "seconds": [
""
],
- "Building name": [
+ "Forever": [
""
],
- "Street": [
+ "%1$sM": [
""
],
- "Post code": [
+ "%1$sY": [
""
],
- "Town location": [
+ "%1$sd": [
""
],
- "Town": [
+ "%1$sh": [
""
],
- "District": [
+ "%1$smin": [
""
],
- "Country subdivision": [
+ "%1$ssec": [
""
],
- "Product id": [
- ""
+ "Country": [
+ "Ülke"
],
- "Description": [
+ "Building number": [
+ "Bina numarası"
+ ],
+ "Building name": [
+ "Bina adı"
+ ],
+ "Street": [
+ "Sokak"
+ ],
+ "Post code": [
+ "Posta kodu"
+ ],
+ "Town location": [
+ "Kasaba konumu"
+ ],
+ "Town": [
+ "Kasaba"
+ ],
+ "District": [
+ "Semt"
+ ],
+ "Country subdivision": [
""
],
- "Product": [
+ "Description": [
""
],
- "search products by it's description or id": [
+ "Enter description or id": [
""
],
- "no products found with that description": [
+ "no match found with that description or id": [
""
],
"You must enter a valid product identifier.": [
@@ -248,16 +2828,19 @@ strings['de'] = {
"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
""
],
+ "Search product": [
+ ""
+ ],
"Quantity": [
""
],
- "how many products will be added": [
+ "How many products will be added": [
""
],
"Add from inventory": [
""
],
- "Image should be smaller than 1 MB": [
+ "Image must be smaller than 1 MB": [
""
],
"Add": [
@@ -266,11 +2849,17 @@ strings['de'] = {
"Remove": [
""
],
+ "Invalid": [
+ ""
+ ],
+ "This product has %1$s applicable taxes configured.": [
+ ""
+ ],
"No taxes configured for this product.": [
""
],
"Amount": [
- ""
+ "Miktar"
],
"Taxes can be in currencies that differ from the main currency used by the merchant.": [
""
@@ -281,10 +2870,10 @@ strings['de'] = {
"Legal name of the tax, e.g. VAT or import duties.": [
""
],
- "add tax to the tax list": [
+ "Add tax to the tax list": [
""
],
- "describe and add a product that is not in the inventory list": [
+ "Describe and add a product that is not in the inventory list": [
""
],
"Add custom product": [
@@ -293,76 +2882,76 @@ strings['de'] = {
"Complete information of the product": [
""
],
- "Image": [
+ "Must be a number": [
""
],
- "photo of the product": [
+ "Must be grater than 0": [
""
],
- "full product description": [
+ "Image": [
""
],
- "Unit": [
+ "Photo of the product.": [
""
],
- "name of the product unit": [
+ "Full product description.": [
""
],
- "Price": [
+ "Unit": [
""
],
- "amount in the current currency": [
+ "Name of the product unit.": [
""
],
- "Taxes": [
- ""
+ "Price": [
+ "Fiyat"
],
- "image": [
+ "Amount in the current currency.": [
""
],
- "description": [
+ "How many products will be added.": [
""
],
- "quantity": [
+ "Taxes": [
""
],
- "unit price": [
+ "Unit price": [
""
],
- "total price": [
+ "Total price": [
""
],
- "required": [
+ "Must be greater than 0": [
""
],
- "not valid": [
+ "Refund deadline can't be before pay deadline": [
""
],
- "must be greater than 0": [
+ "Wire transfer deadline can't be before refund deadline": [
""
],
- "not a valid json": [
+ "Wire transfer deadline can't be before pay deadline": [
""
],
- "should be in the future": [
- ""
+ "Must have a refund deadline": [
+ "Geri ödeme son tarihi"
],
- "refund deadline cannot be before pay deadline": [
+ "Auto refund can't be after refund deadline": [
""
],
- "wire transfer deadline cannot be before refund deadline": [
+ "Must be in the future": [
""
],
- "wire transfer deadline cannot be before pay deadline": [
+ "Simple": [
""
],
- "should have a refund deadline": [
+ "Advanced": [
""
],
- "auto refund cannot be after refund deadline": [
+ "Manage products in order": [
""
],
- "Manage products in order": [
+ "%1$s products with a total price of %2$s.": [
""
],
"Manage list of products in the order.": [
@@ -371,10 +2960,7 @@ strings['de'] = {
"Remove this product from the order.": [
""
],
- "Total price": [
- ""
- ],
- "total product price added up": [
+ "Total product price added up": [
""
],
"Amount to be paid by the customer": [
@@ -383,11 +2969,11 @@ strings['de'] = {
"Order price": [
""
],
- "final order price": [
+ "Final order price": [
""
],
"Summary": [
- ""
+ "Özet"
],
"Title of the order to be shown to the customer": [
""
@@ -396,7 +2982,7 @@ strings['de'] = {
""
],
"Delivery date": [
- ""
+ "Teslim tarihi"
],
"Deadline for physical delivery assured by the merchant.": [
""
@@ -404,11 +2990,11 @@ strings['de'] = {
"Location": [
""
],
- "address where the products will be delivered": [
+ "Address where the products will be delivered": [
""
],
"Fulfillment URL": [
- ""
+ "Gönderim URL'si"
],
"URL to which the user will be redirected after successful payment.": [
""
@@ -419,52 +3005,43 @@ strings['de'] = {
"Override default Taler payment settings for this order": [
""
],
- "Payment deadline": [
- ""
- ],
- "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [
- ""
- ],
- "Refund deadline": [
+ "Payment time": [
""
],
- "Time until which the order can be refunded by the merchant.": [
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
""
],
- "Wire transfer deadline": [
+ "Default": [
""
],
- "Deadline for the exchange to make the wire transfer.": [
- ""
+ "Refund time": [
+ "İade edildi"
],
- "Auto-refund deadline": [
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
""
],
- "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "Wire transfer time": [
""
],
- "Maximum deposit fee": [
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
""
],
- "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "Auto-refund time": [
""
],
- "Maximum wire fee": [
- ""
- ],
- "Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.": [
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
""
],
- "Wire fee amortization": [
- ""
+ "Maximum fee": [
+ "Azami ücret"
],
- "Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.": [
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
""
],
"Create token": [
""
],
- "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
""
],
"Minimum age required": [
@@ -476,6 +3053,9 @@ strings['de'] = {
"Min age defined by the producs is %1$s": [
""
],
+ "No product with age restriction in this order": [
+ ""
+ ],
"Additional information": [
""
],
@@ -485,50 +3065,38 @@ strings['de'] = {
"You must enter a value in JavaScript Object Notation (JSON).": [
""
],
- "days": [
- ""
- ],
- "hours": [
- ""
- ],
- "minutes": [
- ""
- ],
- "seconds": [
- ""
- ],
- "forever": [
- ""
+ "Custom field name": [
+ "Bina adı"
],
- "%1$sM": [
+ "Disabled": [
""
],
- "%1$sY": [
- ""
+ "No deadline": [
+ "Geri ödeme son tarihi"
],
- "%1$sd": [
+ "Deadline at %1$s": [
""
],
- "%1$sh": [
+ "Could not create order": [
""
],
- "%1$smin": [
+ "No exchange would accept a payment because of KYC requirements.": [
""
],
- "%1$ssec": [
+ "No more stock for product with id \"%1$s\".": [
""
],
"Orders": [
""
],
- "create order": [
- ""
+ "Create order": [
+ "Oluşturulma"
],
- "load newer orders": [
+ "Load first page": [
""
],
"Date": [
- ""
+ "Tarih"
],
"Refund": [
""
@@ -536,122 +3104,107 @@ strings['de'] = {
"copy url": [
""
],
- "load older orders": [
- ""
- ],
- "No orders have been found matching your query!": [
- ""
- ],
- "duplicated": [
- ""
- ],
- "invalid format": [
+ "Load more orders after the last one": [
""
],
- "this value exceed the refundable amount": [
+ "Load next page": [
""
],
- "date": [
+ "No orders have been found matching your query!": [
""
],
- "amount": [
+ "Duplicated": [
""
],
- "reason": [
+ "This value exceed the refundable amount": [
""
],
- "amount to be refunded": [
+ "Amount to be refunded": [
""
],
"Max refundable:": [
""
],
- "Reason": [
- ""
- ],
- "Choose one...": [
- ""
- ],
- "requested by the customer": [
+ "Requested by the customer": [
""
],
- "other": [
+ "Other": [
""
],
- "why this order is being refunded": [
+ "Why this order is being refunded": [
""
],
- "more information to give context": [
+ "More information to give context": [
""
],
"Contract Terms": [
""
],
- "human-readable description of the whole purchase": [
+ "Human-readable description of the whole purchase": [
""
],
- "total price for the transaction": [
+ "Total price for the transaction": [
""
],
"URL for this purchase": [
""
],
"Max fee": [
- ""
+ "Azami ücret"
],
- "maximum total deposit fee accepted by the merchant for this contract": [
+ "Maximum total deposit fee accepted by the merchant for this contract": [
""
],
- "Max wire fee": [
- ""
+ "Created at": [
+ "Oluşturulma"
],
- "maximum wire fee accepted by the merchant": [
+ "Time when this contract was generated": [
""
],
- "over how many customer transactions does the merchant expect to amortize wire fees on average": [
- ""
+ "Refund deadline": [
+ "Geri ödeme son tarihi"
],
- "Created at": [
+ "After this deadline has passed no refunds will be accepted": [
""
],
- "time when this contract was generated": [
+ "Payment deadline": [
""
],
- "after this deadline has passed no refunds will be accepted": [
+ "After this deadline, the merchant won't accept payments for the contract": [
""
],
- "after this deadline, the merchant won't accept payments for the contract": [
+ "Wire transfer deadline": [
""
],
- "transfer deadline for the exchange": [
+ "Transfer deadline for the exchange": [
""
],
- "time indicating when the order should be delivered": [
+ "Time indicating when the order should be delivered": [
""
],
- "where the order will be delivered": [
+ "Where the order will be delivered": [
""
],
"Auto-refund delay": [
""
],
- "how long the wallet should try to get an automatic refund for the purchase": [
+ "How long the wallet should try to get an automatic refund for the purchase": [
""
],
"Extra info": [
""
],
- "extra data that is only interpreted by the merchant frontend": [
+ "Extra data that is only interpreted by the merchant frontend": [
""
],
"Order": [
""
],
- "claimed": [
+ "Claimed": [
""
],
- "claimed at": [
- ""
+ "Claimed at": [
+ "Oluşturulma"
],
"Timeline": [
""
@@ -665,22 +3218,22 @@ strings['de'] = {
"Product list": [
""
],
- "paid": [
+ "Paid": [
""
],
- "wired": [
+ "Wired": [
""
],
- "refunded": [
- ""
+ "Refunded": [
+ "İade edildi"
],
- "refund order": [
- ""
+ "Refund order": [
+ "İade edildi"
],
- "not refundable": [
+ "Not refundable": [
""
],
- "refund": [
+ "Next event in": [
""
],
"Refunded amount": [
@@ -695,13 +3248,10 @@ strings['de'] = {
"Refund URI": [
""
],
- "unpaid": [
+ "Unpaid": [
""
],
- "pay at": [
- ""
- ],
- "created at": [
+ "Pay at": [
""
],
"Order status URL": [
@@ -716,331 +3266,337 @@ strings['de'] = {
"Back": [
""
],
- "refund created successfully": [
+ "Refund created successfully": [
""
],
- "could not create the refund": [
+ "Could not create the refund": [
""
],
- "select date to show nearby orders": [
+ "There are pending KYC requirements.": [
""
],
- "order id": [
+ "Missing id": [
""
],
- "jump to order with the given order ID": [
+ "Not found": [
""
],
- "remove all filters": [
+ "Select date to show nearby orders": [
""
],
- "only show paid orders": [
+ "Only show paid orders": [
""
],
- "Paid": [
+ "New": [
""
],
- "only show orders with refunds": [
+ "Only show orders with refunds": [
""
],
- "Refunded": [
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
""
],
- "only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "Not wired": [
""
],
- "Not wired": [
+ "Completed": [
""
],
- "clear date filter": [
+ "Remove all filters": [
""
],
- "date (YYYY/MM/DD)": [
+ "Clear date filter": [
""
],
- "Enter an order id": [
+ "Jump to date (%1$s)": [
""
],
- "order not found": [
+ "Jump to order with the given product ID": [
""
],
- "could not get the order to refund": [
+ "Order id": [
""
],
- "Loading...": [
+ "Invalid. Only characters and numbers": [
""
],
- "click here to configure the stock of the product, leave it as is and the backend will not control stock": [
+ "Just letters and numbers from 2 to 7": [
""
],
- "Manage stock": [
+ "Size of the key must be 32": [
""
],
- "this product has been configured without stock control": [
+ "Internal id on the system": [
""
],
- "Infinite": [
+ "Useful to identify the device physically": [
""
],
- "lost cannot be greater than current and incoming (max %1$s)": [
+ "Verification algorithm": [
""
],
- "Incoming": [
+ "Algorithm to use to verify transaction in offline mode": [
""
],
- "Lost": [
+ "Device key": [
""
],
- "Current": [
+ "Be sure to be very hard to guess or use the random generator": [
""
],
- "remove stock control for this product": [
+ "Your device need to have exactly the same value": [
""
],
- "without stock": [
+ "Generate random secret key": [
""
],
- "Next restock": [
+ "Random": [
""
],
- "Delivery address": [
+ "You can scan the next QR code with your device or save the key before continuing.": [
""
],
- "product identification to use in URLs (for internal use only)": [
+ "Device added successfully": [
""
],
- "illustration of the product for customers": [
+ "Could not add device": [
""
],
- "product description for customers": [
+ "OTP Devices": [
""
],
- "Age restricted": [
+ "Add new devices": [
""
],
- "is this product restricted for customer below certain age?": [
+ "Load more devices before the first one": [
""
],
- "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [
+ "Delete selected devices from the database": [
""
],
- "sale price for customers, including taxes, for above units of the product": [
+ "Load more devices after the last one": [
""
],
- "Stock": [
+ "There is no devices yet, add more pressing the + sign": [
""
],
- "product inventory for products with finite supply (for internal use only)": [
+ "Device delete successfully": [
""
],
- "taxes included in the product price, exposed to customers": [
+ "Could not delete the device": [
""
],
- "Need to complete marked fields": [
+ "Device:": [
""
],
- "could not create product": [
+ "Not modified": [
""
],
- "Products": [
+ "Change key": [
""
],
- "add product to inventory": [
+ "Could not update template": [
""
],
- "Sell": [
+ "Template id is unknown": [
""
],
- "Profit": [
+ "The provided information is inconsistent with the current state of the template": [
""
],
- "Sold": [
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
""
],
- "free": [
+ "Manage stock": [
""
],
- "go to product update page": [
+ "This product has been configured without stock control": [
""
],
- "Update": [
+ "Infinite": [
""
],
- "remove this product from the database": [
+ "Lost can't be greater than current and incoming (max %1$s)": [
""
],
- "update the product with new price": [
+ "Incoming": [
""
],
- "update product with new price": [
+ "Lost": [
""
],
- "add more elements to the inventory": [
+ "Current": [
""
],
- "report elements lost in the inventory": [
+ "Remove stock control for this product": [
""
],
- "new price for the product": [
+ "without stock": [
""
],
- "the are value with errors": [
+ "Next restock": [
""
],
- "update product with new stock and price": [
+ "Warehouse address": [
""
],
- "There is no products yet, add more pressing the + sign": [
+ "Add element to the list": [
""
],
- "product updated successfully": [
+ "Invalid amount": [
+ "Geçerlilik"
+ ],
+ "Product identification to use in URLs (for internal use only).": [
""
],
- "could not update the product": [
+ "Illustration of the product for customers.": [
""
],
- "product delete successfully": [
+ "Product description for customers.": [
""
],
- "could not delete the product": [
+ "Age restriction": [
""
],
- "Product id:": [
+ "Is this product restricted for customer below certain age?": [
""
],
- "To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.": [
+ "Minimum age of the customer": [
""
],
- "If your system supports RFC 8905, you can do this by opening this URI:": [
+ "Unit name": [
""
],
- "it should be greater than 0": [
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
""
],
- "must be a valid URL": [
+ "Example: kg, items or liters": [
""
],
- "Initial balance": [
+ "Price per unit": [
""
],
- "balance prior to deposit": [
+ "Sale price for customers, including taxes, for above units of the product.": [
""
],
- "Exchange URL": [
+ "Stock": [
""
],
- "URL of exchange": [
+ "Inventory for products with finite supply (for internal use only).": [
""
],
- "Next": [
+ "Taxes included in the product price, exposed to customers.": [
""
],
- "Wire method": [
+ "Categories": [
""
],
- "method to use for wire transfer": [
+ "Search by category description or id": [
""
],
- "Select one wire method": [
+ "Categories where this product will be listed on.": [
""
],
- "could not create reserve": [
+ "Product created successfully": [
""
],
- "Valid until": [
+ "Could not create product": [
""
],
- "Created balance": [
+ "Inventory": [
""
],
- "Exchange balance": [
+ "Add product to inventory": [
""
],
- "Picked up": [
+ "Sales": [
""
],
- "Committed": [
+ "Sold": [
""
],
- "Account address": [
+ "Free": [
""
],
- "Subject": [
+ "Go to product update page": [
+ ""
+ ],
+ "Update": [
""
],
- "Tips": [
+ "Remove this product from the database": [
""
],
- "No tips has been authorized from this reserve": [
+ "Load more products after the last one": [
""
],
- "Authorized": [
+ "Update the product with new price": [
""
],
- "Expiration": [
+ "Update product with new price": [
""
],
- "amount of tip": [
+ "Confirm update": [
""
],
- "Justification": [
+ "Add more elements to the inventory": [
""
],
- "reason for the tip": [
+ "Report elements lost in the inventory": [
""
],
- "URL after tip": [
+ "New price for the product": [
""
],
- "URL to visit after tip payment": [
+ "The are value with errors": [
""
],
- "Reserves not yet funded": [
+ "Update product with new stock and price": [
""
],
- "Reserves ready": [
+ "There is no products yet, add more pressing the + sign": [
""
],
- "add new reserve": [
+ "Jump to product with the given product ID": [
""
],
- "Expires at": [
+ "Product id": [
""
],
- "Initial": [
+ "Product updated successfully": [
""
],
- "delete selected reserve from the database": [
+ "Could not update the product": [
""
],
- "authorize new tip from selected reserve": [
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "There is no ready reserves yet, add more pressing the + sign or fund them": [
+ "Could not delete the product": [
""
],
- "Expected Balance": [
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
""
],
- "could not create the tip": [
+ "Deleting an product can't be undone.": [
""
],
- "should not be empty": [
+ "Product id:": [
""
],
- "should be greater that 0": [
+ "Product (ID: %1$s) has been updated": [
""
],
- "can't be empty": [
+ "Could not update product": [
""
],
- "to short": [
+ "Invalid. only characters and numbers": [
""
],
- "just letters and numbers from 2 to 7": [
+ "Must be greater that 0": [
""
],
- "size of the key should be 32": [
+ "To short": [
""
],
"Identifier": [
@@ -1052,21 +3608,39 @@ strings['de'] = {
"Describe what this template stands for": [
""
],
- "Fixed summary": [
+ "If specified, this template will create order with the same summary": [
""
],
- "If specified, this template will create order with the same summary": [
+ "Summary is editable": [
""
],
- "Fixed price": [
+ "Allow the user to change the summary.": [
""
],
"If specified, this template will create order with the same price": [
""
],
- "Minimum age": [
+ "Amount is editable": [
+ ""
+ ],
+ "Allow the user to select the amount to pay.": [
+ ""
+ ],
+ "Currency is editable": [
+ ""
+ ],
+ "Allow the user to change currency.": [
+ ""
+ ],
+ "Supported currencies": [
""
],
+ "Supported currencies: %1$s": [
+ ""
+ ],
+ "Minimum age": [
+ "Asgari yaş"
+ ],
"Is this contract restricted to some age?": [
""
],
@@ -1076,187 +3650,223 @@ strings['de'] = {
"How much time has the customer to complete the payment once the order was created.": [
""
],
- "Verification algorithm": [
+ "OTP device": [
""
],
- "Algorithm to use to verify transaction in offline mode": [
+ "Use to verify transaction while offline.": [
+ ""
+ ],
+ "No OTP device.": [
""
],
- "Point-of-sale key": [
+ "Add one first": [
""
],
- "Useful to validate the purchase": [
+ "No device": [
""
],
- "generate random secret key": [
+ "Use to verify transaction in offline mode.": [
""
],
- "random": [
+ "Template has been created": [
""
],
- "show secret key": [
+ "Could not create template": [
""
],
- "hide secret key": [
+ "Templates": [
""
],
- "hide": [
+ "Add new templates": [
""
],
- "show": [
+ "Load more templates before the first one": [
""
],
- "could not inform template": [
+ "Delete selected templates from the database": [
""
],
- "Amount is required": [
+ "Use template to create new order": [
""
],
- "Order summary is required": [
+ "Use template": [
""
],
- "New order for template": [
+ "Create qr code for the template": [
""
],
- "Amount of the order": [
+ "Load more templates after the last one": [
""
],
- "Order summary": [
+ "There is no templates yet, add more pressing the + sign": [
+ ""
+ ],
+ "Jump to template with the given template ID": [
""
],
- "could not create order from template": [
+ "Template identification": [
""
],
- "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "Fixed amount": [
+ "Failed to delete template": [
""
],
- "Default amount": [
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
""
],
- "Default summary": [
+ "Deleting an template": [
+ ""
+ ],
+ "can't be undone": [
""
],
"Print": [
""
],
- "Setup TOTP": [
+ "Too short": [
""
],
- "Templates": [
+ "Template (ID: %1$s) has been updated": [
+ ""
+ ],
+ "Amount is required": [
""
],
- "add new templates": [
+ "Order summary is required": [
""
],
- "load more templates before the first one": [
+ "New order for template": [
""
],
- "load newer templates": [
+ "Amount of the order": [
""
],
- "delete selected templates from the database": [
+ "Order summary": [
""
],
- "use template to create new order": [
+ "Could not create order from template": [
""
],
- "create qr code for the template": [
+ "You need your access token to perform the operation": [
""
],
- "load more templates after the last one": [
+ "You are updating the access token from instance with id \"%1$s\"": [
""
],
- "load older templates": [
+ "This instance doesn't have authentication token.": [
""
],
- "There is no templates yet, add more pressing the + sign": [
+ "You can leave it empty if there is another layer of security.": [
""
],
- "template delete successfully": [
+ "Current access token": [
""
],
- "could not delete the template": [
+ "Clearing the access token will mean public access to the instance.": [
""
],
- "could not update template": [
+ "Clear token": [
""
],
- "should be one of '%1$s'": [
+ "Confirm change": [
""
],
- "Webhook ID to use": [
+ "Failed to clear token": [
""
],
- "Event": [
+ "Failed to set new token": [
""
],
- "The event of the webhook: why the webhook is used": [
+ "Slug": [
""
],
- "Method": [
+ "Token family slug to use in URLs (for internal use only)": [
""
],
- "Method used by the webhook": [
+ "Kind": [
""
],
- "URL": [
+ "Token family kind": [
""
],
- "URL of the webhook where the customer will be redirected": [
+ "User-readable token family name": [
""
],
- "Header": [
+ "Token family description for customers": [
""
],
- "Header template of the webhook": [
+ "Valid After": [
+ "Geçerlilik"
+ ],
+ "Token family can issue tokens after this date": [
""
],
- "Body": [
+ "Valid Before": [
""
],
- "Body template by the webhook": [
+ "Token family can issue tokens until this date": [
""
],
- "Webhooks": [
+ "Duration": [
""
],
- "add new webhooks": [
+ "Validity duration of a issued token": [
""
],
- "load more webhooks before the first one": [
+ "Token familty created successfully": [
""
],
- "load newer webhooks": [
+ "Could not create token family": [
""
],
- "Event type": [
+ "Token Families": [
""
],
- "delete selected webhook from the database": [
+ "Add token family": [
""
],
- "load more webhooks after the last one": [
+ "Go to token family update page": [
""
],
- "load older webhooks": [
+ "Remove this token family from the database": [
""
],
- "There is no webhooks yet, add more pressing the + sign": [
+ "There are no token families yet, add the first one by pressing the + sign.": [
+ ""
+ ],
+ "Token family updated successfully": [
+ ""
+ ],
+ "Could not update the token family": [
+ ""
+ ],
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
""
],
- "webhook delete successfully": [
+ "Failed to delete token family": [
""
],
- "could not delete the webhook": [
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
""
],
- "check the id, does not look valid": [
+ "Deleting a token family %1$s .": [
""
],
- "should have 52 characters, current %1$s": [
+ "Token Family: %1$s": [
+ ""
+ ],
+ "Token familty updated successfully": [
+ ""
+ ],
+ "Could not update token family": [
+ ""
+ ],
+ "Check the id, does not look valid": [
+ ""
+ ],
+ "Must have 52 characters, current %1$s": [
""
],
"URL doesn't have the right format": [
@@ -1274,7 +3884,10 @@ strings['de'] = {
"Wire transfer ID": [
""
],
- "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ ""
+ ],
+ "Exchange URL": [
""
],
"Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
@@ -1286,23 +3899,23 @@ strings['de'] = {
"Actual amount that was wired to the merchant's bank account": [
""
],
- "could not inform transfer": [
+ "Wire transfer informed successfully": [
""
],
- "Transfers": [
+ "Could not inform transfer": [
""
],
- "add new transfer": [
+ "Transfers": [
""
],
- "load more transfers before the first one": [
+ "Add new transfer": [
""
],
- "load newer transfers": [
+ "Load more transfers before the first one": [
""
],
"Credit": [
- ""
+ "Kredi"
],
"Confirmed": [
""
@@ -1319,292 +3932,379 @@ strings['de'] = {
"no": [
""
],
- "unknown": [
+ "never": [
""
],
- "delete selected transfer from the database": [
+ "unknown": [
""
],
- "load more transfer after the last one": [
+ "Delete selected transfer from the database": [
""
],
- "load older transfers": [
+ "Load more transfers after the last one": [
""
],
"There is no transfer yet, add more pressing the + sign": [
""
],
- "filter by account address": [
+ "All accounts": [
+ "Hesap"
+ ],
+ "Filter by account address": [
""
],
- "only show wire transfers confirmed by the merchant": [
+ "Only show wire transfers confirmed by the merchant": [
""
],
- "only show wire transfers claimed by the exchange": [
+ "Only show wire transfers claimed by the exchange": [
""
],
"Unverified": [
""
],
- "is not valid": [
+ "Wire transfer \"%1$s...\" has been deleted": [
+ ""
+ ],
+ "Failed to delete transfer": [
+ ""
+ ],
+ "Must be business or individual": [
+ ""
+ ],
+ "Pay delay can't be greater than wire transfer delay": [
+ ""
+ ],
+ "Max 7 lines": [
+ ""
+ ],
+ "Doesn't match": [
""
],
- "is not a number": [
+ "Enable access control": [
""
],
- "must be 1 or greater": [
+ "Choose if the backend server should authenticate access.": [
""
],
- "max 7 lines": [
+ "Access control is not yet decided. This instance can't be created.": [
""
],
- "change authorization configuration": [
+ "Authorization must be handled externally.": [
+ ""
+ ],
+ "Authorization is handled by the backend server.": [
""
],
"Need to complete marked fields and choose authorization method": [
""
],
- "This is not a valid bitcoin address.": [
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
""
],
- "This is not a valid Ethereum address.": [
+ "Business name": [
""
],
- "IBAN numbers usually have more that 4 digits": [
+ "Legal name of the business represented by this instance.": [
""
],
- "IBAN numbers usually have less that 34 digits": [
+ "Email": [
""
],
- "IBAN country code not found": [
+ "Contact email": [
""
],
- "IBAN number is not valid, checksum is wrong": [
+ "Website URL": [
""
],
- "Target type": [
+ "URL.": [
""
],
- "Method to use for wire transfer": [
+ "Logo": [
""
],
- "Routing": [
+ "Logo image.": [
""
],
- "Routing number.": [
+ "Physical location of the merchant.": [
""
],
- "Account": [
+ "Jurisdiction": [
""
],
- "Account number.": [
+ "Jurisdiction for legal disputes with the merchant.": [
""
],
- "Business Identifier Code.": [
+ "Pay transaction fee": [
""
],
- "Bank Account Number.": [
+ "Assume the cost of the transaction of let the user pay for it.": [
""
],
- "Unified Payment Interface.": [
+ "Default payment delay": [
""
],
- "Bitcoin protocol.": [
+ "Time customers have to pay an order before the offer expires by default.": [
""
],
- "Ethereum protocol.": [
+ "Default wire transfer delay": [
""
],
- "Interledger protocol.": [
+ "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
""
],
- "Host": [
+ "Instance id": [
""
],
- "Bank host.": [
+ "Failed to update instance": [
""
],
- "Bank account.": [
+ "Must be \"pay\" or \"refund\"": [
""
],
- "Bank account owner's name.": [
+ "Must be one of '%1$s'": [
""
],
- "No accounts yet.": [
+ "Webhook ID to use": [
""
],
- "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Event": [
""
],
- "Business name": [
+ "Pay": [
""
],
- "Legal name of the business represented by this instance.": [
+ "The event of the webhook: why the webhook is used": [
""
],
- "Email": [
+ "Method": [
""
],
- "Contact email": [
+ "GET": [
""
],
- "Website URL": [
+ "POST": [
""
],
- "URL.": [
+ "PUT": [
""
],
- "Logo": [
+ "PATCH": [
""
],
- "Logo image.": [
+ "HEAD": [
""
],
- "Bank account": [
+ "Method used by the webhook": [
""
],
- "URI specifying bank account for crediting revenue.": [
+ "URL": [
""
],
- "Default max deposit fee": [
+ "URL of the webhook where the customer will be redirected": [
""
],
- "Maximum deposit fees this merchant is willing to pay per order by default.": [
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
""
],
- "Default max wire fee": [
+ "For example %1$s will be replaced with the the order's price": [
""
],
- "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [
+ "The short list of variables are:": [
""
],
- "Default wire fee amortization": [
+ "order's description": [
""
],
- "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [
+ "order's price": [
""
],
- "Physical location of the merchant.": [
+ "order's unique identification": [
""
],
- "Jurisdiction": [
+ "the amount that was being refunded": [
""
],
- "Jurisdiction for legal disputes with the merchant.": [
+ "the reason entered by the merchant staff for granting the refund": [
""
],
- "Default payment delay": [
+ "time of the refund in nanoseconds since 1970": [
""
],
- "Time customers have to pay an order before the offer expires by default.": [
+ "Http body": [
""
],
- "Default wire transfer delay": [
+ "Body template by the webhook": [
""
],
- "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
+ "Webhook create successfully": [
""
],
- "Instance id": [
+ "Could not create the webhook": [
""
],
- "Change the authorization method use for this instance.": [
+ "Could not create webhook": [
""
],
- "Manage access token": [
+ "Webhooks": [
""
],
- "Failed to create instance": [
+ "Add new webhooks": [
""
],
- "Login required": [
+ "Load more webhooks before the first one": [
""
],
- "Please enter your access token.": [
+ "Event type": [
""
],
- "Access Token": [
+ "Delete selected webhook from the database": [
""
],
- "The request to the backend take too long and was cancelled": [
+ "Load more webhooks after the last one": [
""
],
- "Diagnostic from %1$s is \"%2$s\"": [
+ "There is no webhooks yet, add more pressing the + sign": [
""
],
- "The backend reported a problem: HTTP status #%1$s": [
+ "Webhook delete successfully": [
""
],
- "Diagnostic from %1$s is '%2$s'": [
+ "Could not delete the webhook": [
""
],
- "Access denied": [
+ "Header": [
""
],
- "The access token provided is invalid.": [
+ "Header template of the webhook": [
""
],
- "No 'default' instance configured yet.": [
+ "Body": [
""
],
- "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Webhook updated": [
""
],
- "The access token provided is invalid": [
+ "Could not update webhook": [
""
],
- "Hide for today": [
+ "Language": [
""
],
- "Instance": [
+ "Advance order creation": [
""
],
- "Settings": [
+ "Shows more options in the order creation form": [
""
],
- "Connection": [
+ "Advance instance settings": [
""
],
- "New": [
+ "Shows more options in the instance settings form": [
""
],
- "List": [
+ "Date format": [
""
],
- "Log out": [
+ "How the date is going to be displayed": [
+ ""
+ ],
+ "Developer mode": [
""
],
- "Check your token is valid": [
+ "Shows more options and tools which are not intended for general audience.": [
""
],
- "Couldn't access the server.": [
+ "Total products": [
+ "Ürünler"
+ ],
+ "Delete selected category from the database": [
+ ""
+ ],
+ "There is no categories yet, add more pressing the + sign": [
+ ""
+ ],
+ "Category delete successfully": [
+ ""
+ ],
+ "Could not delete the category": [
+ ""
+ ],
+ "Category name": [
+ ""
+ ],
+ "Category added successfully": [
+ ""
+ ],
+ "Could not add category": [
+ ""
+ ],
+ "Id:": [
+ ""
+ ],
+ "Name of the category": [
+ ""
+ ],
+ "Products": [
+ "Ürünler"
+ ],
+ "Search by product description or id": [
+ ""
+ ],
+ "Products that this category will list.": [
+ ""
+ ],
+ "Could not update category": [
+ ""
+ ],
+ "Category id is unknown": [
+ ""
+ ],
+ "Without this the merchant backend will refuse to create new orders.": [
+ ""
+ ],
+ "Hide for today": [
+ ""
+ ],
+ "KYC verification needed": [
+ ""
+ ],
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
+ ""
+ ],
+ "Configuration": [
+ ""
+ ],
+ "Settings": [
+ ""
+ ],
+ "Access token": [
""
],
- "Could not infer instance id from url %1$s": [
+ "Connection": [
""
],
- "Server not found": [
+ "Interface": [
""
],
- "Server response with an error code": [
+ "List": [
""
],
- "Got message %1$s from %2$s": [
+ "Log out": [
""
],
- "Response from server is unreadable, http status: %1$s": [
+ "Failed to create instance": [
""
],
- "Unexpected Error": [
+ "checking compatibility with server...": [
""
],
- "The value %1$s is invalid for a payment url": [
+ "Contacting the server failed": [
""
],
- "add element to the list": [
+ "The server version is not supported": [
""
],
- "add": [
+ "Supported version \"%1$s\", server version \"%2$s\".": [
""
],
"Deleting": [
@@ -1613,6 +4313,12 @@ strings['de'] = {
"Changing": [
""
],
+ "Manage access token": [
+ ""
+ ],
+ "Business Name": [
+ ""
+ ],
"Order ID": [
""
],
@@ -1620,24 +4326,48 @@ strings['de'] = {
""
]
}
- }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "tr",
+ "completeness": 6
};
-strings['en'] = {
- "domain": "messages",
+strings['sv'] = {
"locale_data": {
"messages": {
"": {
"domain": "messages",
- "plural_forms": "nplurals=2; plural=(n != 1);",
- "lang": ""
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "sv"
},
- "Cancel": [
+ "The request reached a timeout, check your connection.": [
""
],
- "%1$s": [
+ "The request was cancelled.": [
+ ""
+ ],
+ "A lot of request were made to the same server and this action was throttled.": [
+ ""
+ ],
+ "The response of the request is malformed.": [
+ ""
+ ],
+ "Could not complete the request due to a network problem.": [
+ ""
+ ],
+ "Unexpected request error.": [
+ ""
+ ],
+ "Unexpected error.": [
""
],
+ "Cancel": [
+ "Avbryt"
+ ],
+ "%1$s": [
+ "%1$s"
+ ],
"Close": [
""
],
@@ -1648,18 +4378,141 @@ strings['en'] = {
""
],
"Confirm": [
+ "Bekräfta"
+ ],
+ "Required": [
+ "Obligatoriskt"
+ ],
+ "Letter must be a JSON string": [
+ ""
+ ],
+ "JSON string is invalid": [
+ ""
+ ],
+ "Import": [
+ ""
+ ],
+ "Importing an account from the bank": [
+ ""
+ ],
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
+ ""
+ ],
+ "Account information": [
+ ""
+ ],
+ "Correct form": [
+ ""
+ ],
+ "Comparing account details": [
+ ""
+ ],
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
+ ""
+ ],
+ "Field": [
+ ""
+ ],
+ "In the form": [
+ ""
+ ],
+ "Reported": [
+ ""
+ ],
+ "Type": [
+ ""
+ ],
+ "IBAN": [
+ ""
+ ],
+ "Address": [
+ ""
+ ],
+ "Host": [
+ ""
+ ],
+ "Account id": [
""
],
- "is not the same as the current access token": [
+ "Owner's name": [
""
],
- "cannot be empty": [
+ "Account": [
+ ""
+ ],
+ "Bank host": [
+ ""
+ ],
+ "Bank account": [
+ ""
+ ],
+ "BIC": [
+ ""
+ ],
+ "Ok": [
+ ""
+ ],
+ "Validate bank account: %1$s": [
+ ""
+ ],
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
+ ""
+ ],
+ "Step 1:": [
+ ""
+ ],
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
+ ""
+ ],
+ "Subject": [
+ ""
+ ],
+ "Step 2:": [
+ ""
+ ],
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
+ ""
+ ],
+ "Receiver name": [
+ ""
+ ],
+ "Step 3:": [
+ ""
+ ],
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
+ ""
+ ],
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
+ ""
+ ],
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
+ ""
+ ],
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
+ ""
+ ],
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
+ ""
+ ],
+ "Deleting an instance %1$s .": [
+ ""
+ ],
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
+ ""
+ ],
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
+ ""
+ ],
+ "Purging an instance %1$s .": [
+ ""
+ ],
+ "Is not the same as the current access token": [
""
],
- "cannot be the same as the old token": [
+ "Can't be the same as the old token": [
""
],
- "is not the same": [
+ "Is not the same": [
""
],
"You are updating the access token from instance with id %1$s": [
@@ -1668,25 +4521,25 @@ strings['en'] = {
"Old access token": [
""
],
- "access token currently in use": [
+ "Access token currently in use": [
""
],
"New access token": [
""
],
- "next access token to be used": [
+ "Next access token to be used": [
""
],
"Repeat access token": [
""
],
- "confirm the same access token": [
+ "Confirm the same access token": [
""
],
"Clearing the access token will mean public access to the instance": [
""
],
- "cannot be the same as the old access token": [
+ "Can't be the same as the old access token": [
""
],
"You are setting the access token for the new instance": [
@@ -1707,13 +4560,28 @@ strings['en'] = {
"The operation will be automatically canceled after %1$s seconds": [
""
],
+ "Your password is incorrect": [
+ ""
+ ],
+ "Your instance not found": [
+ ""
+ ],
+ "Login required": [
+ ""
+ ],
+ "Please enter your access token for %1$s.": [
+ ""
+ ],
+ "Access Token": [
+ ""
+ ],
"Instances": [
""
],
"Delete": [
""
],
- "add new instance": [
+ "Add new instance": [
""
],
"ID": [
@@ -1755,55 +4623,325 @@ strings['en'] = {
"Failed to delete instance": [
""
],
- "Instance '%1$s' (ID: %2$s) has been disabled": [
+ "Instance '%1$s' (ID: %2$s) has been purge": [
""
],
"Failed to purge instance": [
""
],
- "Pending KYC verification": [
+ "Loading...": [
""
],
- "Timed out": [
+ "This is not a valid bitcoin address.": [
""
],
- "Exchange": [
+ "This is not a valid Ethereum address.": [
+ ""
+ ],
+ "This is not a valid host.": [
+ ""
+ ],
+ "IBAN numbers usually have more that 4 digits": [
+ ""
+ ],
+ "IBAN numbers usually have less that 34 digits": [
+ ""
+ ],
+ "IBAN country code not found": [
+ ""
+ ],
+ "IBAN number is invalid, checksum is wrong": [
+ ""
+ ],
+ "Choose one...": [
+ ""
+ ],
+ "Method to use for wire transfer": [
""
],
- "Target account": [
+ "Routing": [
""
],
- "KYC URL": [
+ "Routing number.": [
+ ""
+ ],
+ "Account number.": [
""
],
"Code": [
""
],
+ "Business Identifier Code.": [
+ ""
+ ],
+ "International Bank Account Number.": [
+ ""
+ ],
+ "Unified Payment Interface.": [
+ ""
+ ],
+ "Bitcoin protocol.": [
+ ""
+ ],
+ "Ethereum protocol.": [
+ ""
+ ],
+ "Interledger protocol.": [
+ ""
+ ],
+ "Bank host.": [
+ ""
+ ],
+ "Without scheme and may include subpath:": [
+ ""
+ ],
+ "Bank account.": [
+ ""
+ ],
+ "Legal name of the person holding the account.": [
+ ""
+ ],
+ "It should match the bank account name.": [
+ ""
+ ],
+ "Invalid url": [
+ ""
+ ],
+ "URL must end with a '/'": [
+ ""
+ ],
+ "URL must not contain params": [
+ ""
+ ],
+ "URL must not hash param": [
+ ""
+ ],
+ "The request to check the revenue API failed.": [
+ ""
+ ],
+ "Server replied with \"bad request\".": [
+ ""
+ ],
+ "Unauthorized, check credentials.": [
+ ""
+ ],
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
+ ""
+ ],
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
+ ""
+ ],
+ "Account:": [
+ ""
+ ],
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
+ ""
+ ],
+ "Endpoint URL": [
+ ""
+ ],
+ "From where the merchant can download information about incoming wire transfers to this account": [
+ ""
+ ],
+ "Auth type": [
+ ""
+ ],
+ "Choose the authentication type for the account info URL": [
+ ""
+ ],
+ "Without authentication": [
+ ""
+ ],
+ "With password": [
+ ""
+ ],
+ "With token": [
+ ""
+ ],
+ "Do not change": [
+ ""
+ ],
+ "Username": [
+ ""
+ ],
+ "Username to access the account information.": [
+ ""
+ ],
+ "Password": [
+ ""
+ ],
+ "Password to access the account information.": [
+ ""
+ ],
+ "Token": [
+ ""
+ ],
+ "Access token to access the account information.": [
+ ""
+ ],
+ "Match": [
+ ""
+ ],
+ "Check where the information match against the server info.": [
+ ""
+ ],
+ "Not verified": [
+ ""
+ ],
+ "Last test was ok": [
+ ""
+ ],
+ "Last test failed": [
+ ""
+ ],
+ "Compare info from server with account form": [
+ ""
+ ],
+ "Test": [
+ ""
+ ],
+ "Need to complete marked fields": [
+ ""
+ ],
+ "Confirm operation": [
+ ""
+ ],
+ "Account details": [
+ ""
+ ],
+ "Import from bank": [
+ ""
+ ],
+ "Could not create account": [
+ ""
+ ],
+ "No 'default' instance configured yet.": [
+ ""
+ ],
+ "Create a 'default' instance to begin using the merchant backoffice.": [
+ ""
+ ],
+ "Bank accounts": [
+ ""
+ ],
+ "Add new account": [
+ ""
+ ],
+ "Wire method: Bitcoin": [
+ ""
+ ],
+ "Sewgit 1": [
+ ""
+ ],
+ "Sewgit 2": [
+ ""
+ ],
+ "Delete selected accounts from the database": [
+ ""
+ ],
+ "Wire method: x-taler-bank": [
+ ""
+ ],
+ "Account name": [
+ ""
+ ],
+ "Wire method: IBAN": [
+ ""
+ ],
+ "Other accounts": [
+ ""
+ ],
+ "Path": [
+ ""
+ ],
+ "There is no accounts yet, add more pressing the + sign": [
+ ""
+ ],
+ "You need to associate a bank account to receive revenue.": [
+ ""
+ ],
+ "Without this the you won't be able to create new orders.": [
+ ""
+ ],
+ "Bank account delete successfully": [
+ ""
+ ],
+ "Could not delete the bank account": [
+ ""
+ ],
+ "Could not update account": [
+ ""
+ ],
+ "Could not delete account": [
+ ""
+ ],
+ "Pending KYC verification": [
+ ""
+ ],
+ "Exchange": [
+ ""
+ ],
+ "Reason": [
+ ""
+ ],
+ "Pending KYC process, click here to complete": [
+ ""
+ ],
+ "The exchange require a account verification.": [
+ ""
+ ],
"Http Status": [
""
],
"No pending kyc verification!": [
""
],
- "change value to unknown date": [
+ "Change value to unknown date": [
""
],
- "change value to empty": [
+ "Change value to empty": [
""
],
- "clear": [
+ "Change value to never": [
""
],
- "change value to never": [
+ "Never": [
""
],
- "never": [
+ "days": [
""
],
- "Country": [
+ "hours": [
""
],
- "Address": [
+ "minutes": [
+ ""
+ ],
+ "seconds": [
+ ""
+ ],
+ "Forever": [
+ ""
+ ],
+ "%1$sM": [
+ ""
+ ],
+ "%1$sY": [
+ ""
+ ],
+ "%1$sd": [
+ ""
+ ],
+ "%1$sh": [
+ ""
+ ],
+ "%1$smin": [
+ ""
+ ],
+ "%1$ssec": [
+ ""
+ ],
+ "Country": [
""
],
"Building number": [
@@ -1830,19 +4968,13 @@ strings['en'] = {
"Country subdivision": [
""
],
- "Product id": [
- ""
- ],
"Description": [
""
],
- "Product": [
+ "Enter description or id": [
""
],
- "search products by it's description or id": [
- ""
- ],
- "no products found with that description": [
+ "no match found with that description or id": [
""
],
"You must enter a valid product identifier.": [
@@ -1854,16 +4986,19 @@ strings['en'] = {
"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
""
],
+ "Search product": [
+ ""
+ ],
"Quantity": [
""
],
- "how many products will be added": [
+ "How many products will be added": [
""
],
"Add from inventory": [
""
],
- "Image should be smaller than 1 MB": [
+ "Image must be smaller than 1 MB": [
""
],
"Add": [
@@ -1872,6 +5007,12 @@ strings['en'] = {
"Remove": [
""
],
+ "Invalid": [
+ ""
+ ],
+ "This product has %1$s applicable taxes configured.": [
+ ""
+ ],
"No taxes configured for this product.": [
""
],
@@ -1887,10 +5028,10 @@ strings['en'] = {
"Legal name of the tax, e.g. VAT or import duties.": [
""
],
- "add tax to the tax list": [
+ "Add tax to the tax list": [
""
],
- "describe and add a product that is not in the inventory list": [
+ "Describe and add a product that is not in the inventory list": [
""
],
"Add custom product": [
@@ -1899,76 +5040,76 @@ strings['en'] = {
"Complete information of the product": [
""
],
- "Image": [
+ "Must be a number": [
""
],
- "photo of the product": [
+ "Must be grater than 0": [
""
],
- "full product description": [
+ "Image": [
""
],
- "Unit": [
+ "Photo of the product.": [
""
],
- "name of the product unit": [
+ "Full product description.": [
""
],
- "Price": [
+ "Unit": [
""
],
- "amount in the current currency": [
+ "Name of the product unit.": [
""
],
- "Taxes": [
+ "Price": [
""
],
- "image": [
+ "Amount in the current currency.": [
""
],
- "description": [
+ "How many products will be added.": [
""
],
- "quantity": [
+ "Taxes": [
""
],
- "unit price": [
+ "Unit price": [
""
],
- "total price": [
+ "Total price": [
""
],
- "required": [
+ "Must be greater than 0": [
""
],
- "not valid": [
+ "Refund deadline can't be before pay deadline": [
""
],
- "must be greater than 0": [
+ "Wire transfer deadline can't be before refund deadline": [
""
],
- "not a valid json": [
+ "Wire transfer deadline can't be before pay deadline": [
""
],
- "should be in the future": [
+ "Must have a refund deadline": [
""
],
- "refund deadline cannot be before pay deadline": [
+ "Auto refund can't be after refund deadline": [
""
],
- "wire transfer deadline cannot be before refund deadline": [
+ "Must be in the future": [
""
],
- "wire transfer deadline cannot be before pay deadline": [
+ "Simple": [
""
],
- "should have a refund deadline": [
+ "Advanced": [
""
],
- "auto refund cannot be after refund deadline": [
+ "Manage products in order": [
""
],
- "Manage products in order": [
+ "%1$s products with a total price of %2$s.": [
""
],
"Manage list of products in the order.": [
@@ -1977,10 +5118,7 @@ strings['en'] = {
"Remove this product from the order.": [
""
],
- "Total price": [
- ""
- ],
- "total product price added up": [
+ "Total product price added up": [
""
],
"Amount to be paid by the customer": [
@@ -1989,7 +5127,7 @@ strings['en'] = {
"Order price": [
""
],
- "final order price": [
+ "Final order price": [
""
],
"Summary": [
@@ -2010,7 +5148,7 @@ strings['en'] = {
"Location": [
""
],
- "address where the products will be delivered": [
+ "Address where the products will be delivered": [
""
],
"Fulfillment URL": [
@@ -2025,52 +5163,43 @@ strings['en'] = {
"Override default Taler payment settings for this order": [
""
],
- "Payment deadline": [
- ""
- ],
- "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [
- ""
- ],
- "Refund deadline": [
+ "Payment time": [
""
],
- "Time until which the order can be refunded by the merchant.": [
- ""
- ],
- "Wire transfer deadline": [
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
""
],
- "Deadline for the exchange to make the wire transfer.": [
+ "Default": [
""
],
- "Auto-refund deadline": [
+ "Refund time": [
""
],
- "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
""
],
- "Maximum deposit fee": [
+ "Wire transfer time": [
""
],
- "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
""
],
- "Maximum wire fee": [
+ "Auto-refund time": [
""
],
- "Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.": [
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
""
],
- "Wire fee amortization": [
+ "Maximum fee": [
""
],
- "Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.": [
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
""
],
"Create token": [
""
],
- "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
""
],
"Minimum age required": [
@@ -2082,6 +5211,9 @@ strings['en'] = {
"Min age defined by the producs is %1$s": [
""
],
+ "No product with age restriction in this order": [
+ ""
+ ],
"Additional information": [
""
],
@@ -2091,46 +5223,34 @@ strings['en'] = {
"You must enter a value in JavaScript Object Notation (JSON).": [
""
],
- "days": [
- ""
- ],
- "hours": [
- ""
- ],
- "minutes": [
- ""
- ],
- "seconds": [
+ "Custom field name": [
""
],
- "forever": [
+ "Disabled": [
""
],
- "%1$sM": [
+ "No deadline": [
""
],
- "%1$sY": [
+ "Deadline at %1$s": [
""
],
- "%1$sd": [
+ "Could not create order": [
""
],
- "%1$sh": [
- ""
- ],
- "%1$smin": [
+ "No exchange would accept a payment because of KYC requirements.": [
""
],
- "%1$ssec": [
+ "No more stock for product with id \"%1$s\".": [
""
],
"Orders": [
""
],
- "create order": [
+ "Create order": [
""
],
- "load newer orders": [
+ "Load first page": [
""
],
"Date": [
@@ -2142,61 +5262,46 @@ strings['en'] = {
"copy url": [
""
],
- "load older orders": [
- ""
- ],
- "No orders have been found matching your query!": [
- ""
- ],
- "duplicated": [
- ""
- ],
- "invalid format": [
+ "Load more orders after the last one": [
""
],
- "this value exceed the refundable amount": [
+ "Load next page": [
""
],
- "date": [
+ "No orders have been found matching your query!": [
""
],
- "amount": [
+ "Duplicated": [
""
],
- "reason": [
+ "This value exceed the refundable amount": [
""
],
- "amount to be refunded": [
+ "Amount to be refunded": [
""
],
"Max refundable:": [
""
],
- "Reason": [
- ""
- ],
- "Choose one...": [
- ""
- ],
- "requested by the customer": [
+ "Requested by the customer": [
""
],
- "other": [
+ "Other": [
""
],
- "why this order is being refunded": [
+ "Why this order is being refunded": [
""
],
- "more information to give context": [
+ "More information to give context": [
""
],
"Contract Terms": [
""
],
- "human-readable description of the whole purchase": [
+ "Human-readable description of the whole purchase": [
""
],
- "total price for the transaction": [
+ "Total price for the transaction": [
""
],
"URL for this purchase": [
@@ -2205,58 +5310,58 @@ strings['en'] = {
"Max fee": [
""
],
- "maximum total deposit fee accepted by the merchant for this contract": [
+ "Maximum total deposit fee accepted by the merchant for this contract": [
""
],
- "Max wire fee": [
+ "Created at": [
""
],
- "maximum wire fee accepted by the merchant": [
+ "Time when this contract was generated": [
""
],
- "over how many customer transactions does the merchant expect to amortize wire fees on average": [
+ "Refund deadline": [
""
],
- "Created at": [
+ "After this deadline has passed no refunds will be accepted": [
""
],
- "time when this contract was generated": [
+ "Payment deadline": [
""
],
- "after this deadline has passed no refunds will be accepted": [
+ "After this deadline, the merchant won't accept payments for the contract": [
""
],
- "after this deadline, the merchant won't accept payments for the contract": [
+ "Wire transfer deadline": [
""
],
- "transfer deadline for the exchange": [
+ "Transfer deadline for the exchange": [
""
],
- "time indicating when the order should be delivered": [
+ "Time indicating when the order should be delivered": [
""
],
- "where the order will be delivered": [
+ "Where the order will be delivered": [
""
],
"Auto-refund delay": [
""
],
- "how long the wallet should try to get an automatic refund for the purchase": [
+ "How long the wallet should try to get an automatic refund for the purchase": [
""
],
"Extra info": [
""
],
- "extra data that is only interpreted by the merchant frontend": [
+ "Extra data that is only interpreted by the merchant frontend": [
""
],
"Order": [
""
],
- "claimed": [
+ "Claimed": [
""
],
- "claimed at": [
+ "Claimed at": [
""
],
"Timeline": [
@@ -2271,22 +5376,22 @@ strings['en'] = {
"Product list": [
""
],
- "paid": [
+ "Paid": [
""
],
- "wired": [
+ "Wired": [
""
],
- "refunded": [
+ "Refunded": [
""
],
- "refund order": [
+ "Refund order": [
""
],
- "not refundable": [
+ "Not refundable": [
""
],
- "refund": [
+ "Next event in": [
""
],
"Refunded amount": [
@@ -2301,13 +5406,10 @@ strings['en'] = {
"Refund URI": [
""
],
- "unpaid": [
- ""
- ],
- "pay at": [
+ "Unpaid": [
""
],
- "created at": [
+ "Pay at": [
""
],
"Order status URL": [
@@ -2322,331 +5424,337 @@ strings['en'] = {
"Back": [
""
],
- "refund created successfully": [
+ "Refund created successfully": [
""
],
- "could not create the refund": [
+ "Could not create the refund": [
""
],
- "select date to show nearby orders": [
+ "There are pending KYC requirements.": [
""
],
- "order id": [
+ "Missing id": [
""
],
- "jump to order with the given order ID": [
+ "Not found": [
""
],
- "remove all filters": [
+ "Select date to show nearby orders": [
""
],
- "only show paid orders": [
+ "Only show paid orders": [
""
],
- "Paid": [
+ "New": [
""
],
- "only show orders with refunds": [
+ "Only show orders with refunds": [
""
],
- "Refunded": [
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
+ ""
+ ],
+ "Not wired": [
""
],
- "only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "Completed": [
""
],
- "Not wired": [
+ "Remove all filters": [
""
],
- "clear date filter": [
+ "Clear date filter": [
""
],
- "date (YYYY/MM/DD)": [
+ "Jump to date (%1$s)": [
""
],
- "Enter an order id": [
+ "Jump to order with the given product ID": [
""
],
- "order not found": [
+ "Order id": [
""
],
- "could not get the order to refund": [
+ "Invalid. Only characters and numbers": [
""
],
- "Loading...": [
+ "Just letters and numbers from 2 to 7": [
""
],
- "click here to configure the stock of the product, leave it as is and the backend will not control stock": [
+ "Size of the key must be 32": [
""
],
- "Manage stock": [
+ "Internal id on the system": [
""
],
- "this product has been configured without stock control": [
+ "Useful to identify the device physically": [
""
],
- "Infinite": [
+ "Verification algorithm": [
""
],
- "lost cannot be greater than current and incoming (max %1$s)": [
+ "Algorithm to use to verify transaction in offline mode": [
""
],
- "Incoming": [
+ "Device key": [
""
],
- "Lost": [
+ "Be sure to be very hard to guess or use the random generator": [
""
],
- "Current": [
+ "Your device need to have exactly the same value": [
""
],
- "remove stock control for this product": [
+ "Generate random secret key": [
""
],
- "without stock": [
+ "Random": [
""
],
- "Next restock": [
+ "You can scan the next QR code with your device or save the key before continuing.": [
""
],
- "Delivery address": [
+ "Device added successfully": [
""
],
- "product identification to use in URLs (for internal use only)": [
+ "Could not add device": [
""
],
- "illustration of the product for customers": [
+ "OTP Devices": [
""
],
- "product description for customers": [
+ "Add new devices": [
""
],
- "Age restricted": [
+ "Load more devices before the first one": [
""
],
- "is this product restricted for customer below certain age?": [
+ "Delete selected devices from the database": [
""
],
- "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [
+ "Load more devices after the last one": [
""
],
- "sale price for customers, including taxes, for above units of the product": [
+ "There is no devices yet, add more pressing the + sign": [
""
],
- "Stock": [
+ "Device delete successfully": [
""
],
- "product inventory for products with finite supply (for internal use only)": [
+ "Could not delete the device": [
""
],
- "taxes included in the product price, exposed to customers": [
+ "Device:": [
""
],
- "Need to complete marked fields": [
+ "Not modified": [
""
],
- "could not create product": [
+ "Change key": [
""
],
- "Products": [
+ "Could not update template": [
""
],
- "add product to inventory": [
+ "Template id is unknown": [
""
],
- "Sell": [
+ "The provided information is inconsistent with the current state of the template": [
""
],
- "Profit": [
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
""
],
- "Sold": [
+ "Manage stock": [
""
],
- "free": [
+ "This product has been configured without stock control": [
""
],
- "go to product update page": [
+ "Infinite": [
""
],
- "Update": [
+ "Lost can't be greater than current and incoming (max %1$s)": [
""
],
- "remove this product from the database": [
+ "Incoming": [
""
],
- "update the product with new price": [
+ "Lost": [
""
],
- "update product with new price": [
+ "Current": [
""
],
- "add more elements to the inventory": [
+ "Remove stock control for this product": [
""
],
- "report elements lost in the inventory": [
+ "without stock": [
""
],
- "new price for the product": [
+ "Next restock": [
""
],
- "the are value with errors": [
+ "Warehouse address": [
""
],
- "update product with new stock and price": [
+ "Add element to the list": [
""
],
- "There is no products yet, add more pressing the + sign": [
+ "Invalid amount": [
""
],
- "product updated successfully": [
+ "Product identification to use in URLs (for internal use only).": [
""
],
- "could not update the product": [
+ "Illustration of the product for customers.": [
""
],
- "product delete successfully": [
+ "Product description for customers.": [
""
],
- "could not delete the product": [
+ "Age restriction": [
""
],
- "Product id:": [
+ "Is this product restricted for customer below certain age?": [
""
],
- "To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.": [
+ "Minimum age of the customer": [
""
],
- "If your system supports RFC 8905, you can do this by opening this URI:": [
+ "Unit name": [
""
],
- "it should be greater than 0": [
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
""
],
- "must be a valid URL": [
+ "Example: kg, items or liters": [
""
],
- "Initial balance": [
+ "Price per unit": [
""
],
- "balance prior to deposit": [
+ "Sale price for customers, including taxes, for above units of the product.": [
""
],
- "Exchange URL": [
+ "Stock": [
""
],
- "URL of exchange": [
+ "Inventory for products with finite supply (for internal use only).": [
""
],
- "Next": [
+ "Taxes included in the product price, exposed to customers.": [
""
],
- "Wire method": [
+ "Categories": [
""
],
- "method to use for wire transfer": [
+ "Search by category description or id": [
""
],
- "Select one wire method": [
+ "Categories where this product will be listed on.": [
""
],
- "could not create reserve": [
+ "Product created successfully": [
""
],
- "Valid until": [
+ "Could not create product": [
""
],
- "Created balance": [
+ "Inventory": [
""
],
- "Exchange balance": [
+ "Add product to inventory": [
""
],
- "Picked up": [
+ "Sales": [
""
],
- "Committed": [
+ "Sold": [
""
],
- "Account address": [
+ "Free": [
""
],
- "Subject": [
+ "Go to product update page": [
""
],
- "Tips": [
+ "Update": [
""
],
- "No tips has been authorized from this reserve": [
+ "Remove this product from the database": [
""
],
- "Authorized": [
+ "Load more products after the last one": [
""
],
- "Expiration": [
+ "Update the product with new price": [
""
],
- "amount of tip": [
+ "Update product with new price": [
""
],
- "Justification": [
+ "Confirm update": [
""
],
- "reason for the tip": [
+ "Add more elements to the inventory": [
""
],
- "URL after tip": [
+ "Report elements lost in the inventory": [
""
],
- "URL to visit after tip payment": [
+ "New price for the product": [
""
],
- "Reserves not yet funded": [
+ "The are value with errors": [
""
],
- "Reserves ready": [
+ "Update product with new stock and price": [
+ ""
+ ],
+ "There is no products yet, add more pressing the + sign": [
""
],
- "add new reserve": [
+ "Jump to product with the given product ID": [
""
],
- "Expires at": [
+ "Product id": [
""
],
- "Initial": [
+ "Product updated successfully": [
""
],
- "delete selected reserve from the database": [
+ "Could not update the product": [
""
],
- "authorize new tip from selected reserve": [
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "There is no ready reserves yet, add more pressing the + sign or fund them": [
+ "Could not delete the product": [
""
],
- "Expected Balance": [
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
""
],
- "could not create the tip": [
+ "Deleting an product can't be undone.": [
""
],
- "should not be empty": [
+ "Product id:": [
""
],
- "should be greater that 0": [
+ "Product (ID: %1$s) has been updated": [
""
],
- "can't be empty": [
+ "Could not update product": [
""
],
- "to short": [
+ "Invalid. only characters and numbers": [
""
],
- "just letters and numbers from 2 to 7": [
+ "Must be greater that 0": [
""
],
- "size of the key should be 32": [
+ "To short": [
""
],
"Identifier": [
@@ -2658,18 +5766,36 @@ strings['en'] = {
"Describe what this template stands for": [
""
],
- "Fixed summary": [
+ "If specified, this template will create order with the same summary": [
""
],
- "If specified, this template will create order with the same summary": [
+ "Summary is editable": [
""
],
- "Fixed price": [
+ "Allow the user to change the summary.": [
""
],
"If specified, this template will create order with the same price": [
""
],
+ "Amount is editable": [
+ ""
+ ],
+ "Allow the user to select the amount to pay.": [
+ ""
+ ],
+ "Currency is editable": [
+ ""
+ ],
+ "Allow the user to change currency.": [
+ ""
+ ],
+ "Supported currencies": [
+ ""
+ ],
+ "Supported currencies: %1$s": [
+ ""
+ ],
"Minimum age": [
""
],
@@ -2682,187 +5808,223 @@ strings['en'] = {
"How much time has the customer to complete the payment once the order was created.": [
""
],
- "Verification algorithm": [
+ "OTP device": [
""
],
- "Algorithm to use to verify transaction in offline mode": [
+ "Use to verify transaction while offline.": [
""
],
- "Point-of-sale key": [
+ "No OTP device.": [
""
],
- "Useful to validate the purchase": [
+ "Add one first": [
""
],
- "generate random secret key": [
+ "No device": [
""
],
- "random": [
+ "Use to verify transaction in offline mode.": [
""
],
- "show secret key": [
+ "Template has been created": [
""
],
- "hide secret key": [
+ "Could not create template": [
""
],
- "hide": [
+ "Templates": [
""
],
- "show": [
+ "Add new templates": [
""
],
- "could not inform template": [
+ "Load more templates before the first one": [
""
],
- "Amount is required": [
+ "Delete selected templates from the database": [
""
],
- "Order summary is required": [
+ "Use template to create new order": [
""
],
- "New order for template": [
+ "Use template": [
""
],
- "Amount of the order": [
+ "Create qr code for the template": [
""
],
- "Order summary": [
+ "Load more templates after the last one": [
+ ""
+ ],
+ "There is no templates yet, add more pressing the + sign": [
+ ""
+ ],
+ "Jump to template with the given template ID": [
+ ""
+ ],
+ "Template identification": [
""
],
- "could not create order from template": [
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [
+ "Failed to delete template": [
""
],
- "Fixed amount": [
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
""
],
- "Default amount": [
+ "Deleting an template": [
""
],
- "Default summary": [
+ "can't be undone": [
""
],
"Print": [
""
],
- "Setup TOTP": [
+ "Too short": [
""
],
- "Templates": [
+ "Template (ID: %1$s) has been updated": [
""
],
- "add new templates": [
+ "Amount is required": [
""
],
- "load more templates before the first one": [
+ "Order summary is required": [
""
],
- "load newer templates": [
+ "New order for template": [
""
],
- "delete selected templates from the database": [
+ "Amount of the order": [
""
],
- "use template to create new order": [
+ "Order summary": [
""
],
- "create qr code for the template": [
+ "Could not create order from template": [
""
],
- "load more templates after the last one": [
+ "You need your access token to perform the operation": [
""
],
- "load older templates": [
+ "You are updating the access token from instance with id \"%1$s\"": [
""
],
- "There is no templates yet, add more pressing the + sign": [
+ "This instance doesn't have authentication token.": [
""
],
- "template delete successfully": [
+ "You can leave it empty if there is another layer of security.": [
""
],
- "could not delete the template": [
+ "Current access token": [
""
],
- "could not update template": [
+ "Clearing the access token will mean public access to the instance.": [
""
],
- "should be one of '%1$s'": [
+ "Clear token": [
""
],
- "Webhook ID to use": [
+ "Confirm change": [
""
],
- "Event": [
+ "Failed to clear token": [
""
],
- "The event of the webhook: why the webhook is used": [
+ "Failed to set new token": [
""
],
- "Method": [
+ "Slug": [
""
],
- "Method used by the webhook": [
+ "Token family slug to use in URLs (for internal use only)": [
""
],
- "URL": [
+ "Kind": [
""
],
- "URL of the webhook where the customer will be redirected": [
+ "Token family kind": [
""
],
- "Header": [
+ "User-readable token family name": [
""
],
- "Header template of the webhook": [
+ "Token family description for customers": [
""
],
- "Body": [
+ "Valid After": [
""
],
- "Body template by the webhook": [
+ "Token family can issue tokens after this date": [
""
],
- "Webhooks": [
+ "Valid Before": [
""
],
- "add new webhooks": [
+ "Token family can issue tokens until this date": [
""
],
- "load more webhooks before the first one": [
+ "Duration": [
""
],
- "load newer webhooks": [
+ "Validity duration of a issued token": [
""
],
- "Event type": [
+ "Token familty created successfully": [
""
],
- "delete selected webhook from the database": [
+ "Could not create token family": [
""
],
- "load more webhooks after the last one": [
+ "Token Families": [
""
],
- "load older webhooks": [
+ "Add token family": [
""
],
- "There is no webhooks yet, add more pressing the + sign": [
+ "Go to token family update page": [
+ ""
+ ],
+ "Remove this token family from the database": [
+ ""
+ ],
+ "There are no token families yet, add the first one by pressing the + sign.": [
+ ""
+ ],
+ "Token family updated successfully": [
+ ""
+ ],
+ "Could not update the token family": [
+ ""
+ ],
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
+ ""
+ ],
+ "Failed to delete token family": [
+ ""
+ ],
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
+ ""
+ ],
+ "Deleting a token family %1$s .": [
+ ""
+ ],
+ "Token Family: %1$s": [
""
],
- "webhook delete successfully": [
+ "Token familty updated successfully": [
""
],
- "could not delete the webhook": [
+ "Could not update token family": [
""
],
- "check the id, does not look valid": [
+ "Check the id, does not look valid": [
""
],
- "should have 52 characters, current %1$s": [
+ "Must have 52 characters, current %1$s": [
""
],
"URL doesn't have the right format": [
@@ -2880,7 +6042,10 @@ strings['en'] = {
"Wire transfer ID": [
""
],
- "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ ""
+ ],
+ "Exchange URL": [
""
],
"Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
@@ -2892,19 +6057,19 @@ strings['en'] = {
"Actual amount that was wired to the merchant's bank account": [
""
],
- "could not inform transfer": [
+ "Wire transfer informed successfully": [
""
],
- "Transfers": [
+ "Could not inform transfer": [
""
],
- "add new transfer": [
+ "Transfers": [
""
],
- "load more transfers before the first one": [
+ "Add new transfer": [
""
],
- "load newer transfers": [
+ "Load more transfers before the first one": [
""
],
"Credit": [
@@ -2925,292 +6090,379 @@ strings['en'] = {
"no": [
""
],
- "unknown": [
+ "never": [
""
],
- "delete selected transfer from the database": [
+ "unknown": [
""
],
- "load more transfer after the last one": [
+ "Delete selected transfer from the database": [
""
],
- "load older transfers": [
+ "Load more transfers after the last one": [
""
],
"There is no transfer yet, add more pressing the + sign": [
""
],
- "filter by account address": [
+ "All accounts": [
+ ""
+ ],
+ "Filter by account address": [
""
],
- "only show wire transfers confirmed by the merchant": [
+ "Only show wire transfers confirmed by the merchant": [
""
],
- "only show wire transfers claimed by the exchange": [
+ "Only show wire transfers claimed by the exchange": [
""
],
"Unverified": [
""
],
- "is not valid": [
+ "Wire transfer \"%1$s...\" has been deleted": [
+ ""
+ ],
+ "Failed to delete transfer": [
+ ""
+ ],
+ "Must be business or individual": [
+ ""
+ ],
+ "Pay delay can't be greater than wire transfer delay": [
+ ""
+ ],
+ "Max 7 lines": [
+ ""
+ ],
+ "Doesn't match": [
+ ""
+ ],
+ "Enable access control": [
""
],
- "is not a number": [
+ "Choose if the backend server should authenticate access.": [
""
],
- "must be 1 or greater": [
+ "Access control is not yet decided. This instance can't be created.": [
""
],
- "max 7 lines": [
+ "Authorization must be handled externally.": [
""
],
- "change authorization configuration": [
+ "Authorization is handled by the backend server.": [
""
],
"Need to complete marked fields and choose authorization method": [
""
],
- "This is not a valid bitcoin address.": [
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
""
],
- "This is not a valid Ethereum address.": [
+ "Business name": [
""
],
- "IBAN numbers usually have more that 4 digits": [
+ "Legal name of the business represented by this instance.": [
""
],
- "IBAN numbers usually have less that 34 digits": [
+ "Email": [
""
],
- "IBAN country code not found": [
+ "Contact email": [
""
],
- "IBAN number is not valid, checksum is wrong": [
+ "Website URL": [
""
],
- "Target type": [
+ "URL.": [
""
],
- "Method to use for wire transfer": [
+ "Logo": [
""
],
- "Routing": [
+ "Logo image.": [
""
],
- "Routing number.": [
+ "Physical location of the merchant.": [
""
],
- "Account": [
+ "Jurisdiction": [
""
],
- "Account number.": [
+ "Jurisdiction for legal disputes with the merchant.": [
""
],
- "Business Identifier Code.": [
+ "Pay transaction fee": [
""
],
- "Bank Account Number.": [
+ "Assume the cost of the transaction of let the user pay for it.": [
""
],
- "Unified Payment Interface.": [
+ "Default payment delay": [
""
],
- "Bitcoin protocol.": [
+ "Time customers have to pay an order before the offer expires by default.": [
""
],
- "Ethereum protocol.": [
+ "Default wire transfer delay": [
""
],
- "Interledger protocol.": [
+ "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
""
],
- "Host": [
+ "Instance id": [
""
],
- "Bank host.": [
+ "Failed to update instance": [
""
],
- "Bank account.": [
+ "Must be \"pay\" or \"refund\"": [
""
],
- "Bank account owner's name.": [
+ "Must be one of '%1$s'": [
""
],
- "No accounts yet.": [
+ "Webhook ID to use": [
""
],
- "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Event": [
""
],
- "Business name": [
+ "Pay": [
""
],
- "Legal name of the business represented by this instance.": [
+ "The event of the webhook: why the webhook is used": [
""
],
- "Email": [
+ "Method": [
""
],
- "Contact email": [
+ "GET": [
""
],
- "Website URL": [
+ "POST": [
""
],
- "URL.": [
+ "PUT": [
""
],
- "Logo": [
+ "PATCH": [
""
],
- "Logo image.": [
+ "HEAD": [
""
],
- "Bank account": [
+ "Method used by the webhook": [
""
],
- "URI specifying bank account for crediting revenue.": [
+ "URL": [
""
],
- "Default max deposit fee": [
+ "URL of the webhook where the customer will be redirected": [
""
],
- "Maximum deposit fees this merchant is willing to pay per order by default.": [
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
""
],
- "Default max wire fee": [
+ "For example %1$s will be replaced with the the order's price": [
""
],
- "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [
+ "The short list of variables are:": [
""
],
- "Default wire fee amortization": [
+ "order's description": [
""
],
- "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [
+ "order's price": [
""
],
- "Physical location of the merchant.": [
+ "order's unique identification": [
""
],
- "Jurisdiction": [
+ "the amount that was being refunded": [
""
],
- "Jurisdiction for legal disputes with the merchant.": [
+ "the reason entered by the merchant staff for granting the refund": [
""
],
- "Default payment delay": [
+ "time of the refund in nanoseconds since 1970": [
""
],
- "Time customers have to pay an order before the offer expires by default.": [
+ "Http body": [
""
],
- "Default wire transfer delay": [
+ "Body template by the webhook": [
""
],
- "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
+ "Webhook create successfully": [
""
],
- "Instance id": [
+ "Could not create the webhook": [
""
],
- "Change the authorization method use for this instance.": [
+ "Could not create webhook": [
""
],
- "Manage access token": [
+ "Webhooks": [
""
],
- "Failed to create instance": [
+ "Add new webhooks": [
""
],
- "Login required": [
+ "Load more webhooks before the first one": [
""
],
- "Please enter your access token.": [
+ "Event type": [
""
],
- "Access Token": [
+ "Delete selected webhook from the database": [
+ ""
+ ],
+ "Load more webhooks after the last one": [
""
],
- "The request to the backend take too long and was cancelled": [
+ "There is no webhooks yet, add more pressing the + sign": [
""
],
- "Diagnostic from %1$s is \"%2$s\"": [
+ "Webhook delete successfully": [
""
],
- "The backend reported a problem: HTTP status #%1$s": [
+ "Could not delete the webhook": [
""
],
- "Diagnostic from %1$s is '%2$s'": [
+ "Header": [
""
],
- "Access denied": [
+ "Header template of the webhook": [
""
],
- "The access token provided is invalid.": [
+ "Body": [
""
],
- "No 'default' instance configured yet.": [
+ "Webhook updated": [
""
],
- "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Could not update webhook": [
""
],
- "The access token provided is invalid": [
+ "Language": [
""
],
- "Hide for today": [
+ "Advance order creation": [
""
],
- "Instance": [
+ "Shows more options in the order creation form": [
""
],
- "Settings": [
+ "Advance instance settings": [
""
],
- "Connection": [
+ "Shows more options in the instance settings form": [
""
],
- "New": [
+ "Date format": [
""
],
- "List": [
+ "How the date is going to be displayed": [
""
],
- "Log out": [
+ "Developer mode": [
+ ""
+ ],
+ "Shows more options and tools which are not intended for general audience.": [
+ ""
+ ],
+ "Total products": [
+ ""
+ ],
+ "Delete selected category from the database": [
+ ""
+ ],
+ "There is no categories yet, add more pressing the + sign": [
+ ""
+ ],
+ "Category delete successfully": [
+ ""
+ ],
+ "Could not delete the category": [
+ ""
+ ],
+ "Category name": [
+ ""
+ ],
+ "Category added successfully": [
+ ""
+ ],
+ "Could not add category": [
+ ""
+ ],
+ "Id:": [
+ ""
+ ],
+ "Name of the category": [
+ ""
+ ],
+ "Products": [
+ ""
+ ],
+ "Search by product description or id": [
+ ""
+ ],
+ "Products that this category will list.": [
+ ""
+ ],
+ "Could not update category": [
+ ""
+ ],
+ "Category id is unknown": [
+ ""
+ ],
+ "Without this the merchant backend will refuse to create new orders.": [
+ ""
+ ],
+ "Hide for today": [
+ ""
+ ],
+ "KYC verification needed": [
+ ""
+ ],
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
+ ""
+ ],
+ "Configuration": [
""
],
- "Check your token is valid": [
+ "Settings": [
""
],
- "Couldn't access the server.": [
+ "Access token": [
""
],
- "Could not infer instance id from url %1$s": [
+ "Connection": [
""
],
- "Server not found": [
+ "Interface": [
""
],
- "Server response with an error code": [
+ "List": [
""
],
- "Got message %1$s from %2$s": [
+ "Log out": [
""
],
- "Response from server is unreadable, http status: %1$s": [
+ "Failed to create instance": [
""
],
- "Unexpected Error": [
+ "checking compatibility with server...": [
""
],
- "The value %1$s is invalid for a payment url": [
+ "Contacting the server failed": [
""
],
- "add element to the list": [
+ "The server version is not supported": [
""
],
- "add": [
+ "Supported version \"%1$s\", server version \"%2$s\".": [
""
],
"Deleting": [
@@ -3219,6 +6471,12 @@ strings['en'] = {
"Changing": [
""
],
+ "Manage access token": [
+ ""
+ ],
+ "Business Name": [
+ ""
+ ],
"Order ID": [
""
],
@@ -3226,461 +6484,884 @@ strings['en'] = {
""
]
}
- }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "sv",
+ "completeness": 0
};
-strings['es'] = {
- "domain": "messages",
+strings['it'] = {
"locale_data": {
"messages": {
"": {
"domain": "messages",
"plural_forms": "nplurals=2; plural=n != 1;",
- "lang": "es"
+ "lang": "it"
},
+ "The request reached a timeout, check your connection.": [
+ ""
+ ],
+ "The request was cancelled.": [
+ ""
+ ],
+ "A lot of request were made to the same server and this action was throttled.": [
+ ""
+ ],
+ "The response of the request is malformed.": [
+ ""
+ ],
+ "Could not complete the request due to a network problem.": [
+ ""
+ ],
+ "Unexpected request error.": [
+ ""
+ ],
+ "Unexpected error.": [
+ ""
+ ],
"Cancel": [
- "Cancelar"
+ ""
],
"%1$s": [
- "%1$s"
+ ""
],
"Close": [
""
],
"Continue": [
- "Continuar"
+ ""
],
"Clear": [
- "Limpiar"
+ ""
],
"Confirm": [
- "Confirmar"
+ "Confermare"
],
- "is not the same as the current access token": [
- "no es el mismo que el token de acceso actual"
+ "Required": [
+ "Obbligatorio"
],
- "cannot be empty": [
- "no puede ser vacío"
+ "Letter must be a JSON string": [
+ ""
],
- "cannot be the same as the old token": [
- "no puede ser igual al viejo token"
+ "JSON string is invalid": [
+ ""
],
- "is not the same": [
- "no son iguales"
+ "Import": [
+ ""
+ ],
+ "Importing an account from the bank": [
+ ""
+ ],
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
+ ""
+ ],
+ "Account information": [
+ ""
+ ],
+ "Correct form": [
+ ""
+ ],
+ "Comparing account details": [
+ ""
+ ],
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
+ ""
+ ],
+ "Field": [
+ ""
+ ],
+ "In the form": [
+ ""
+ ],
+ "Reported": [
+ ""
+ ],
+ "Type": [
+ ""
+ ],
+ "IBAN": [
+ ""
+ ],
+ "Address": [
+ ""
+ ],
+ "Host": [
+ ""
+ ],
+ "Account id": [
+ "Importo"
+ ],
+ "Owner's name": [
+ ""
+ ],
+ "Account": [
+ ""
+ ],
+ "Bank host": [
+ ""
+ ],
+ "Bank account": [
+ ""
+ ],
+ "BIC": [
+ ""
+ ],
+ "Ok": [
+ ""
+ ],
+ "Validate bank account: %1$s": [
+ ""
+ ],
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
+ ""
+ ],
+ "Step 1:": [
+ ""
+ ],
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
+ ""
+ ],
+ "Subject": [
+ "Soggetto"
+ ],
+ "Step 2:": [
+ ""
+ ],
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
+ ""
+ ],
+ "Receiver name": [
+ ""
+ ],
+ "Step 3:": [
+ ""
+ ],
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
+ ""
+ ],
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
+ ""
+ ],
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
+ ""
+ ],
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
+ ""
+ ],
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
+ ""
+ ],
+ "Deleting an instance %1$s .": [
+ ""
+ ],
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
+ ""
+ ],
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
+ ""
+ ],
+ "Purging an instance %1$s .": [
+ ""
+ ],
+ "Is not the same as the current access token": [
+ ""
+ ],
+ "Can't be the same as the old token": [
+ ""
+ ],
+ "Is not the same": [
+ ""
],
"You are updating the access token from instance with id %1$s": [
- "Está actualizando el token de acceso para la instancia con id %1$s"
+ ""
],
"Old access token": [
- "Viejo token de acceso"
+ ""
],
- "access token currently in use": [
- "acceder al token en uso actualmente"
+ "Access token currently in use": [
+ ""
],
"New access token": [
- "Nuevo token de acceso"
+ ""
],
- "next access token to be used": [
- "siguiente token de acceso a usar"
+ "Next access token to be used": [
+ ""
],
"Repeat access token": [
- "Repetir token de acceso"
+ ""
],
- "confirm the same access token": [
- "confirmar el mismo token de acceso"
+ "Confirm the same access token": [
+ ""
],
"Clearing the access token will mean public access to the instance": [
- "Limpiar el token de acceso significa acceso público a la instancia"
+ ""
],
- "cannot be the same as the old access token": [
- "no puede ser igual al anterior token de acceso"
+ "Can't be the same as the old access token": [
+ ""
],
"You are setting the access token for the new instance": [
- "Está estableciendo el token de acceso para la nueva instancia"
+ ""
],
"With external authorization method no check will be done by the merchant backend": [
- "Con el método de autorización externa no se hará ninguna revisión por el backend del comerciante"
+ ""
],
"Set external authorization": [
- "Establecer autorización externa"
+ ""
],
"Set access token": [
- "Establecer token de acceso"
+ ""
],
"Operation in progress...": [
- "Operación en progreso..."
+ ""
],
"The operation will be automatically canceled after %1$s seconds": [
- "La operación será automáticamente cancelada luego de %1$s segundos"
+ ""
+ ],
+ "Your password is incorrect": [
+ ""
+ ],
+ "Your instance not found": [
+ ""
+ ],
+ "Login required": [
+ ""
+ ],
+ "Please enter your access token for %1$s.": [
+ ""
+ ],
+ "Access Token": [
+ ""
],
"Instances": [
- "Instancias"
+ ""
],
"Delete": [
- "Eliminar"
+ ""
],
- "add new instance": [
- "agregar nueva instancia"
+ "Add new instance": [
+ ""
],
"ID": [
- "ID"
+ ""
],
"Name": [
- "Nombre"
+ ""
],
"Edit": [
- "Editar"
+ ""
],
"Purge": [
- "Purgar"
+ ""
],
"There is no instances yet, add more pressing the + sign": [
- "Todavía no hay instancias, agregue más presionando el signo +"
+ ""
],
"Only show active instances": [
- "Solo mostrar instancias activas"
+ ""
],
"Active": [
- "Activo"
+ ""
],
"Only show deleted instances": [
- "Mostrar solo instancias eliminadas"
+ ""
],
"Deleted": [
- "Eliminado"
+ ""
],
"Show all instances": [
- "Mostrar todas las instancias"
+ ""
],
"All": [
- "Todo"
+ ""
],
"Instance \"%1$s\" (ID: %2$s) has been deleted": [
- "La instancia '%1$s' (ID: %2$s) fue eliminada"
+ ""
],
"Failed to delete instance": [
- "Fallo al eliminar instancia"
+ ""
],
- "Instance '%1$s' (ID: %2$s) has been disabled": [
- "Instance '%1$s' (ID: %2$s) ha sido deshabilitada"
+ "Instance '%1$s' (ID: %2$s) has been purge": [
+ ""
],
"Failed to purge instance": [
- "Fallo al purgar la instancia"
+ ""
],
- "Pending KYC verification": [
- "Verificación KYC pendiente"
+ "Loading...": [
+ ""
],
- "Timed out": [
- "Expirado"
+ "This is not a valid bitcoin address.": [
+ ""
],
- "Exchange": [
- "Exchange"
+ "This is not a valid Ethereum address.": [
+ ""
],
- "Target account": [
- "Cuenta objetivo"
+ "This is not a valid host.": [
+ ""
+ ],
+ "IBAN numbers usually have more that 4 digits": [
+ ""
+ ],
+ "IBAN numbers usually have less that 34 digits": [
+ ""
+ ],
+ "IBAN country code not found": [
+ ""
+ ],
+ "IBAN number is invalid, checksum is wrong": [
+ ""
+ ],
+ "Choose one...": [
+ ""
+ ],
+ "Method to use for wire transfer": [
+ ""
+ ],
+ "Routing": [
+ ""
],
- "KYC URL": [
- "URL de KYC"
+ "Routing number.": [
+ ""
+ ],
+ "Account number.": [
+ ""
],
"Code": [
- "Código"
+ ""
+ ],
+ "Business Identifier Code.": [
+ ""
+ ],
+ "International Bank Account Number.": [
+ ""
+ ],
+ "Unified Payment Interface.": [
+ ""
+ ],
+ "Bitcoin protocol.": [
+ ""
+ ],
+ "Ethereum protocol.": [
+ ""
+ ],
+ "Interledger protocol.": [
+ ""
+ ],
+ "Bank host.": [
+ ""
+ ],
+ "Without scheme and may include subpath:": [
+ ""
+ ],
+ "Bank account.": [
+ ""
+ ],
+ "Legal name of the person holding the account.": [
+ ""
+ ],
+ "It should match the bank account name.": [
+ ""
+ ],
+ "Invalid url": [
+ ""
+ ],
+ "URL must end with a '/'": [
+ ""
+ ],
+ "URL must not contain params": [
+ ""
+ ],
+ "URL must not hash param": [
+ ""
+ ],
+ "The request to check the revenue API failed.": [
+ ""
+ ],
+ "Server replied with \"bad request\".": [
+ ""
+ ],
+ "Unauthorized, check credentials.": [
+ ""
+ ],
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
+ ""
+ ],
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
+ ""
+ ],
+ "Account:": [
+ "Conto:"
+ ],
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
+ ""
+ ],
+ "Endpoint URL": [
+ ""
+ ],
+ "From where the merchant can download information about incoming wire transfers to this account": [
+ ""
+ ],
+ "Auth type": [
+ ""
+ ],
+ "Choose the authentication type for the account info URL": [
+ ""
+ ],
+ "Without authentication": [
+ ""
+ ],
+ "With password": [
+ ""
+ ],
+ "With token": [
+ ""
+ ],
+ "Do not change": [
+ ""
+ ],
+ "Username": [
+ ""
+ ],
+ "Username to access the account information.": [
+ ""
+ ],
+ "Password": [
+ ""
+ ],
+ "Password to access the account information.": [
+ ""
+ ],
+ "Token": [
+ ""
+ ],
+ "Access token to access the account information.": [
+ ""
+ ],
+ "Match": [
+ ""
+ ],
+ "Check where the information match against the server info.": [
+ ""
+ ],
+ "Not verified": [
+ ""
+ ],
+ "Last test was ok": [
+ ""
+ ],
+ "Last test failed": [
+ ""
+ ],
+ "Compare info from server with account form": [
+ ""
+ ],
+ "Test": [
+ ""
+ ],
+ "Need to complete marked fields": [
+ ""
+ ],
+ "Confirm operation": [
+ ""
+ ],
+ "Account details": [
+ ""
+ ],
+ "Import from bank": [
+ ""
+ ],
+ "Could not create account": [
+ ""
+ ],
+ "No 'default' instance configured yet.": [
+ ""
+ ],
+ "Create a 'default' instance to begin using the merchant backoffice.": [
+ ""
+ ],
+ "Bank accounts": [
+ ""
+ ],
+ "Add new account": [
+ ""
+ ],
+ "Wire method: Bitcoin": [
+ ""
+ ],
+ "Sewgit 1": [
+ ""
+ ],
+ "Sewgit 2": [
+ ""
+ ],
+ "Delete selected accounts from the database": [
+ ""
+ ],
+ "Wire method: x-taler-bank": [
+ ""
+ ],
+ "Account name": [
+ ""
+ ],
+ "Wire method: IBAN": [
+ ""
+ ],
+ "Other accounts": [
+ ""
+ ],
+ "Path": [
+ ""
+ ],
+ "There is no accounts yet, add more pressing the + sign": [
+ ""
+ ],
+ "You need to associate a bank account to receive revenue.": [
+ ""
+ ],
+ "Without this the you won't be able to create new orders.": [
+ ""
+ ],
+ "Bank account delete successfully": [
+ ""
+ ],
+ "Could not delete the bank account": [
+ ""
+ ],
+ "Could not update account": [
+ ""
+ ],
+ "Could not delete account": [
+ ""
+ ],
+ "Pending KYC verification": [
+ ""
+ ],
+ "Exchange": [
+ ""
+ ],
+ "Reason": [
+ ""
+ ],
+ "Pending KYC process, click here to complete": [
+ ""
+ ],
+ "The exchange require a account verification.": [
+ ""
],
"Http Status": [
- "Estado http"
+ ""
],
"No pending kyc verification!": [
- "¡No hay verificación kyc pendiente!"
+ ""
],
- "change value to unknown date": [
- "cambiar valor a fecha desconocida"
+ "Change value to unknown date": [
+ ""
],
- "change value to empty": [
- "cambiar valor a vacío"
+ "Change value to empty": [
+ ""
],
- "clear": [
- "limpiar"
+ "Change value to never": [
+ ""
],
- "change value to never": [
- "cambiar valor a nunca"
+ "Never": [
+ ""
],
- "never": [
- "nunca"
+ "days": [
+ ""
],
- "Country": [
- "País"
+ "hours": [
+ ""
],
- "Address": [
- "Dirección"
+ "minutes": [
+ ""
+ ],
+ "seconds": [
+ ""
+ ],
+ "Forever": [
+ ""
+ ],
+ "%1$sM": [
+ ""
+ ],
+ "%1$sY": [
+ ""
+ ],
+ "%1$sd": [
+ ""
+ ],
+ "%1$sh": [
+ ""
+ ],
+ "%1$smin": [
+ ""
+ ],
+ "%1$ssec": [
+ ""
+ ],
+ "Country": [
+ ""
],
"Building number": [
- "Número de edificio"
+ ""
],
"Building name": [
- "Nombre de edificio"
+ ""
],
"Street": [
- "Calle"
+ ""
],
"Post code": [
- "Código postal"
+ ""
],
"Town location": [
- "Ubicación de ciudad"
+ ""
],
"Town": [
- "Ciudad"
+ ""
],
"District": [
- "Distrito"
+ ""
],
"Country subdivision": [
- "Subdivisión de país"
- ],
- "Product id": [
- "Id de producto"
+ ""
],
"Description": [
- "Descripcion"
- ],
- "Product": [
- "Productos"
+ ""
],
- "search products by it's description or id": [
- "buscar productos por su descripción o ID"
+ "Enter description or id": [
+ ""
],
- "no products found with that description": [
- "no se encontraron productos con esa descripción"
+ "no match found with that description or id": [
+ ""
],
"You must enter a valid product identifier.": [
- "Debe ingresar un identificador de producto válido."
+ ""
],
"Quantity must be greater than 0!": [
- "¡Cantidad debe ser mayor que 0!"
+ ""
],
"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
- "Esta cantidad excede las existencias restantes. Actualmente, solo quedan %1$s unidades sin reservar en las existencias."
+ ""
+ ],
+ "Search product": [
+ ""
],
"Quantity": [
- "Cantidad"
+ ""
],
- "how many products will be added": [
- "cuántos productos serán agregados"
+ "How many products will be added": [
+ ""
],
"Add from inventory": [
- "Agregar del inventario"
+ ""
],
- "Image should be smaller than 1 MB": [
- "La imagen debe ser mas chica que 1 MB"
+ "Image must be smaller than 1 MB": [
+ ""
],
"Add": [
- "Agregar"
+ ""
],
"Remove": [
- "Eliminar"
+ ""
+ ],
+ "Invalid": [
+ ""
+ ],
+ "This product has %1$s applicable taxes configured.": [
+ ""
],
"No taxes configured for this product.": [
- "Ningun impuesto configurado para este producto."
+ ""
],
"Amount": [
- "Monto"
+ "Importo"
],
"Taxes can be in currencies that differ from the main currency used by the merchant.": [
- "Impuestos pueden estar en divisas que difieren de la principal divisa usada por el comerciante."
+ ""
],
"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.": [
- "Ingrese divisa y valor separado por dos puntos, e.g. &quot;USD:2.3&quot;."
+ ""
],
"Legal name of the tax, e.g. VAT or import duties.": [
- "Nombre legal del impuesto, e.g. IVA o arancel."
+ ""
],
- "add tax to the tax list": [
- "agregar impuesto a la lista de impuestos"
+ "Add tax to the tax list": [
+ ""
],
- "describe and add a product that is not in the inventory list": [
- "describa y agregue un producto que no está en la lista de inventarios"
+ "Describe and add a product that is not in the inventory list": [
+ ""
],
"Add custom product": [
- "Agregue un producto personalizado"
+ ""
],
"Complete information of the product": [
- "Complete información del producto"
+ ""
+ ],
+ "Must be a number": [
+ ""
+ ],
+ "Must be grater than 0": [
+ ""
],
"Image": [
- "Imagen"
+ ""
],
- "photo of the product": [
- "foto del producto"
+ "Photo of the product.": [
+ ""
],
- "full product description": [
- "descripción completa del producto"
+ "Full product description.": [
+ ""
],
"Unit": [
- "Unidad"
+ ""
],
- "name of the product unit": [
- "nombre de la unidad del producto"
+ "Name of the product unit.": [
+ ""
],
"Price": [
- "Precio"
- ],
- "amount in the current currency": [
- "monto de la divisa actual"
- ],
- "Taxes": [
- "Impuestos"
- ],
- "image": [
- "imagen"
+ ""
],
- "description": [
- "descripción"
+ "Amount in the current currency.": [
+ ""
],
- "quantity": [
- "cantidad"
+ "How many products will be added.": [
+ ""
],
- "unit price": [
- "precio unitario"
+ "Taxes": [
+ ""
],
- "total price": [
- "precio total"
+ "Unit price": [
+ ""
],
- "required": [
- "requerido"
+ "Total price": [
+ ""
],
- "not valid": [
- "no es un json válido"
+ "Must be greater than 0": [
+ ""
],
- "must be greater than 0": [
- "debe ser mayor que 0"
+ "Refund deadline can't be before pay deadline": [
+ ""
],
- "not a valid json": [
- "no es un json válido"
+ "Wire transfer deadline can't be before refund deadline": [
+ ""
],
- "should be in the future": [
- "deberían ser en el futuro"
+ "Wire transfer deadline can't be before pay deadline": [
+ ""
],
- "refund deadline cannot be before pay deadline": [
- "plazo de reembolso no puede ser antes que el plazo de pago"
+ "Must have a refund deadline": [
+ ""
],
- "wire transfer deadline cannot be before refund deadline": [
- "el plazo de la transferencia bancaria no puede ser antes que el plazo de reembolso"
+ "Auto refund can't be after refund deadline": [
+ ""
],
- "wire transfer deadline cannot be before pay deadline": [
- "el plazo de la transferencia bancaria no puede ser antes que el plazo de pago"
+ "Must be in the future": [
+ ""
],
- "should have a refund deadline": [
- "debería tener un plazo de reembolso"
+ "Simple": [
+ ""
],
- "auto refund cannot be after refund deadline": [
- "reembolso automático no puede ser después qu el plazo de reembolso"
+ "Advanced": [
+ ""
],
"Manage products in order": [
- "Manejar productos en orden"
+ ""
+ ],
+ "%1$s products with a total price of %2$s.": [
+ ""
],
"Manage list of products in the order.": [
- "Manejar lista de productos en la orden."
+ ""
],
"Remove this product from the order.": [
- "Remover este producto de la orden."
- ],
- "Total price": [
- "Precio total"
+ ""
],
- "total product price added up": [
- "precio total de producto agregado"
+ "Total product price added up": [
+ ""
],
"Amount to be paid by the customer": [
- "Monto a ser pagado por el cliente"
+ ""
],
"Order price": [
- "Precio de la orden"
+ ""
],
- "final order price": [
- "Precio final de la orden"
+ "Final order price": [
+ ""
],
"Summary": [
- "Resumen"
+ ""
],
"Title of the order to be shown to the customer": [
- "Título de la orden a ser mostrado al cliente"
+ ""
],
"Shipping and Fulfillment": [
- "Envío y cumplimiento"
+ ""
],
"Delivery date": [
- "Fecha de entrega"
+ ""
],
"Deadline for physical delivery assured by the merchant.": [
- "Plazo para la entrega física asegurado por el comerciante."
+ ""
],
"Location": [
- "Ubicación"
+ ""
],
- "address where the products will be delivered": [
- "dirección a donde los productos serán entregados"
+ "Address where the products will be delivered": [
+ ""
],
"Fulfillment URL": [
- "URL de cumplimiento"
+ ""
],
"URL to which the user will be redirected after successful payment.": [
- "URL al cual el usuario será redirigido luego de pago exitoso."
+ ""
],
"Taler payment options": [
- "Opciones de pago de Taler"
+ ""
],
"Override default Taler payment settings for this order": [
- "Sobreescribir pagos por omisión de Taler para esta orden"
- ],
- "Payment deadline": [
- "Plazo de pago"
- ],
- "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [
- "Plazo límite para que el cliente pague por la oferta antes de que expire. Productos del inventario serán reservados hasta este plazo límite."
- ],
- "Refund deadline": [
- "Plazo de reembolso"
+ ""
],
- "Time until which the order can be refunded by the merchant.": [
- "Tiempo hasta el cual la orden puede ser reembolsada por el comerciante."
+ "Payment time": [
+ ""
],
- "Wire transfer deadline": [
- "Plazo de la transferencia"
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
+ ""
],
- "Deadline for the exchange to make the wire transfer.": [
- "Plazo para que el exchange haga la transferencia."
+ "Default": [
+ ""
],
- "Auto-refund deadline": [
- "Plazo de reembolso automático"
+ "Refund time": [
+ "Rimborsato"
],
- "Time until which the wallet will automatically check for refunds without user interaction.": [
- "Tiempo hasta el cual la billetera será automáticamente revisada por reembolsos win interación por parte del usuario."
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
+ ""
],
- "Maximum deposit fee": [
- "Máxima tarifa de depósito"
+ "Wire transfer time": [
+ ""
],
- "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
- "Máxima tarifa de depósito que el comerciante esta dispuesto a cubir para esta orden. Mayores tarifas de depósito deben ser cubiertas completamente por el consumidor."
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
+ ""
],
- "Maximum wire fee": [
- "Máxima tarifa de transferencia"
+ "Auto-refund time": [
+ ""
],
- "Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.": [
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
""
],
- "Wire fee amortization": [
- "Amortización de comisión de transferencia"
+ "Maximum fee": [
+ ""
],
- "Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.": [
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
""
],
"Create token": [
- "Administrar token"
+ ""
],
- "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
""
],
"Minimum age required": [
- "Login necesario"
+ ""
],
"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products": [
""
@@ -3688,8 +7369,11 @@ strings['es'] = {
"Min age defined by the producs is %1$s": [
""
],
+ "No product with age restriction in this order": [
+ ""
+ ],
"Additional information": [
- "Información extra"
+ ""
],
"Custom information to be included in the contract for this order.": [
""
@@ -3697,562 +7381,538 @@ strings['es'] = {
"You must enter a value in JavaScript Object Notation (JSON).": [
""
],
- "days": [
- "días"
- ],
- "hours": [
- "horas"
- ],
- "minutes": [
- "minutos"
- ],
- "seconds": [
- "segundos"
- ],
- "forever": [
- "nunca"
+ "Custom field name": [
+ ""
],
- "%1$sM": [
+ "Disabled": [
""
],
- "%1$sY": [
+ "No deadline": [
""
],
- "%1$sd": [
+ "Deadline at %1$s": [
""
],
- "%1$sh": [
+ "Could not create order": [
""
],
- "%1$smin": [
+ "No exchange would accept a payment because of KYC requirements.": [
""
],
- "%1$ssec": [
+ "No more stock for product with id \"%1$s\".": [
""
],
"Orders": [
- "Órdenes"
+ ""
],
- "create order": [
- "creado"
+ "Create order": [
+ ""
],
- "load newer orders": [
- "cargar nuevas ordenes"
+ "Load first page": [
+ ""
],
"Date": [
- "Fecha"
+ "Data"
],
"Refund": [
- "Devolución"
+ ""
],
"copy url": [
- "copiar url"
- ],
- "load older orders": [
- "cargar viejas ordenes"
- ],
- "No orders have been found matching your query!": [
- "¡No se encontraron órdenes que emparejen su búsqueda!"
- ],
- "duplicated": [
- "duplicado"
+ ""
],
- "invalid format": [
- "formato inválido"
+ "Load more orders after the last one": [
+ ""
],
- "this value exceed the refundable amount": [
- "este monto excede el monto reembolsable"
+ "Load next page": [
+ ""
],
- "date": [
- "fecha"
+ "No orders have been found matching your query!": [
+ ""
],
- "amount": [
- "monto"
+ "Duplicated": [
+ ""
],
- "reason": [
- "razón"
+ "This value exceed the refundable amount": [
+ ""
],
- "amount to be refunded": [
- "monto a ser reembolsado"
+ "Amount to be refunded": [
+ ""
],
"Max refundable:": [
- "Máximo reembolzable:"
- ],
- "Reason": [
- "Razón"
- ],
- "Choose one...": [
- "Elija uno..."
+ ""
],
- "requested by the customer": [
- "pedido por el consumidor"
+ "Requested by the customer": [
+ ""
],
- "other": [
- "otro"
+ "Other": [
+ ""
],
- "why this order is being refunded": [
- "por qué esta orden está siendo reembolsada"
+ "Why this order is being refunded": [
+ ""
],
- "more information to give context": [
- "más información para dar contexto"
+ "More information to give context": [
+ ""
],
"Contract Terms": [
- "Términos de contrato"
+ ""
],
- "human-readable description of the whole purchase": [
- "descripción legible de toda la compra"
+ "Human-readable description of the whole purchase": [
+ ""
],
- "total price for the transaction": [
- "precio total de la transacción"
+ "Total price for the transaction": [
+ ""
],
"URL for this purchase": [
- "URL para esta compra"
+ ""
],
"Max fee": [
- "Máxima comisión"
+ ""
],
- "maximum total deposit fee accepted by the merchant for this contract": [
+ "Maximum total deposit fee accepted by the merchant for this contract": [
""
],
- "Max wire fee": [
- "Impuesto de transferencia máximo"
+ "Created at": [
+ ""
],
- "maximum wire fee accepted by the merchant": [
+ "Time when this contract was generated": [
""
],
- "over how many customer transactions does the merchant expect to amortize wire fees on average": [
+ "Refund deadline": [
""
],
- "Created at": [
- "Creado en"
+ "After this deadline has passed no refunds will be accepted": [
+ ""
],
- "time when this contract was generated": [
+ "Payment deadline": [
""
],
- "after this deadline has passed no refunds will be accepted": [
+ "After this deadline, the merchant won't accept payments for the contract": [
""
],
- "after this deadline, the merchant won't accept payments for the contract": [
+ "Wire transfer deadline": [
""
],
- "transfer deadline for the exchange": [
+ "Transfer deadline for the exchange": [
""
],
- "time indicating when the order should be delivered": [
+ "Time indicating when the order should be delivered": [
""
],
- "where the order will be delivered": [
+ "Where the order will be delivered": [
""
],
"Auto-refund delay": [
- "Plazo de reembolso automático"
+ ""
],
- "how long the wallet should try to get an automatic refund for the purchase": [
+ "How long the wallet should try to get an automatic refund for the purchase": [
""
],
"Extra info": [
- "Información extra"
+ ""
],
- "extra data that is only interpreted by the merchant frontend": [
+ "Extra data that is only interpreted by the merchant frontend": [
""
],
"Order": [
- "Orden"
+ ""
],
- "claimed": [
- "reclamado"
+ "Claimed": [
+ ""
],
- "claimed at": [
- "reclamado"
+ "Claimed at": [
+ ""
],
"Timeline": [
- "Cronología"
+ ""
],
"Payment details": [
- "Detalles de pago"
+ ""
],
"Order status": [
- "Estado de orden"
+ ""
],
"Product list": [
- "Lista de producto"
+ ""
],
- "paid": [
- "pagados"
+ "Paid": [
+ ""
],
- "wired": [
- "transferido"
+ "Wired": [
+ ""
],
- "refunded": [
- "reembolzado"
+ "Refunded": [
+ "Rimborsato"
],
- "refund order": [
- "reembolzado"
+ "Refund order": [
+ "Rimborsato"
],
- "not refundable": [
- "Máximo reembolzable:"
+ "Not refundable": [
+ ""
],
- "refund": [
- "reembolzar"
+ "Next event in": [
+ ""
],
"Refunded amount": [
- "Monto reembolzado"
+ ""
],
"Refund taken": [
- "Reembolzado"
+ ""
],
"Status URL": [
- "URL de estado de orden"
+ ""
],
"Refund URI": [
- "Devolución"
- ],
- "unpaid": [
- "impago"
+ ""
],
- "pay at": [
- "pagar en"
+ "Unpaid": [
+ ""
],
- "created at": [
- "creado"
+ "Pay at": [
+ ""
],
"Order status URL": [
- "URL de estado de orden"
+ ""
],
"Payment URI": [
- "URI de pago"
+ ""
],
"Unknown order status. This is an error, please contact the administrator.": [
- "Estado de orden desconocido. Esto es un error, por favor contacte a su administrador."
+ ""
],
"Back": [
+ "Indietro"
+ ],
+ "Refund created successfully": [
""
],
- "refund created successfully": [
- "reembolzo creado satisfactoriamente"
+ "Could not create the refund": [
+ ""
],
- "could not create the refund": [
- "No se pudo create el reembolso"
+ "There are pending KYC requirements.": [
+ ""
],
- "select date to show nearby orders": [
+ "Missing id": [
""
],
- "order id": [
- "ir a id de orden"
+ "Not found": [
+ ""
],
- "jump to order with the given order ID": [
+ "Select date to show nearby orders": [
""
],
- "remove all filters": [
+ "Only show paid orders": [
""
],
- "only show paid orders": [
+ "New": [
""
],
- "Paid": [
- "Pagado"
+ "Only show orders with refunds": [
+ ""
],
- "only show orders with refunds": [
- "No se pudo create el reembolso"
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
+ ""
],
- "Refunded": [
- "Reembolzado"
+ "Not wired": [
+ ""
],
- "only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "Completed": [
""
],
- "Not wired": [
- "No transferido"
+ "Remove all filters": [
+ ""
],
- "clear date filter": [
+ "Clear date filter": [
""
],
- "date (YYYY/MM/DD)": [
+ "Jump to date (%1$s)": [
""
],
- "Enter an order id": [
- "ir a id de orden"
+ "Jump to order with the given product ID": [
+ ""
],
- "order not found": [
- "Servidor no encontrado"
+ "Order id": [
+ ""
],
- "could not get the order to refund": [
- "No se pudo create el reembolso"
+ "Invalid. Only characters and numbers": [
+ ""
],
- "Loading...": [
- "Cargando..."
+ "Just letters and numbers from 2 to 7": [
+ ""
],
- "click here to configure the stock of the product, leave it as is and the backend will not control stock": [
+ "Size of the key must be 32": [
""
],
- "Manage stock": [
- "Administrar stock"
+ "Internal id on the system": [
+ ""
],
- "this product has been configured without stock control": [
+ "Useful to identify the device physically": [
""
],
- "Infinite": [
- "Inifinito"
+ "Verification algorithm": [
+ ""
],
- "lost cannot be greater than current and incoming (max %1$s)": [
- "la pérdida no puede ser mayor al stock actual + entrante (max %1$s )"
+ "Algorithm to use to verify transaction in offline mode": [
+ ""
],
- "Incoming": [
- "Ingresando"
+ "Device key": [
+ ""
],
- "Lost": [
- "Perdido"
+ "Be sure to be very hard to guess or use the random generator": [
+ ""
],
- "Current": [
- "Actual"
+ "Your device need to have exactly the same value": [
+ ""
],
- "remove stock control for this product": [
+ "Generate random secret key": [
""
],
- "without stock": [
- "sin stock"
+ "Random": [
+ ""
],
- "Next restock": [
- "Próximo reabastecimiento"
+ "You can scan the next QR code with your device or save the key before continuing.": [
+ ""
],
- "Delivery address": [
- "Dirección de entrega"
+ "Device added successfully": [
+ ""
],
- "product identification to use in URLs (for internal use only)": [
+ "Could not add device": [
""
],
- "illustration of the product for customers": [
+ "OTP Devices": [
""
],
- "product description for customers": [
+ "Add new devices": [
""
],
- "Age restricted": [
+ "Load more devices before the first one": [
""
],
- "is this product restricted for customer below certain age?": [
+ "Delete selected devices from the database": [
""
],
- "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [
+ "Load more devices after the last one": [
""
],
- "sale price for customers, including taxes, for above units of the product": [
+ "There is no devices yet, add more pressing the + sign": [
""
],
- "Stock": [
- "Existencias"
+ "Device delete successfully": [
+ ""
],
- "product inventory for products with finite supply (for internal use only)": [
+ "Could not delete the device": [
""
],
- "taxes included in the product price, exposed to customers": [
+ "Device:": [
""
],
- "Need to complete marked fields": [
+ "Not modified": [
""
],
- "could not create product": [
- "no se pudo crear el producto"
+ "Change key": [
+ ""
],
- "Products": [
- "Productos"
+ "Could not update template": [
+ ""
],
- "add product to inventory": [
+ "Template id is unknown": [
""
],
- "Sell": [
- "Venta"
+ "The provided information is inconsistent with the current state of the template": [
+ ""
],
- "Profit": [
- "Ganancia"
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
+ ""
],
- "Sold": [
- "Vendido"
+ "Manage stock": [
+ ""
],
- "free": [
- "Gratis"
+ "This product has been configured without stock control": [
+ ""
],
- "go to product update page": [
- "producto actualizado correctamente"
+ "Infinite": [
+ ""
],
- "Update": [
- "Actualizar"
+ "Lost can't be greater than current and incoming (max %1$s)": [
+ ""
],
- "remove this product from the database": [
+ "Incoming": [
""
],
- "update the product with new price": [
+ "Lost": [
""
],
- "update product with new price": [
+ "Current": [
""
],
- "add more elements to the inventory": [
+ "Remove stock control for this product": [
""
],
- "report elements lost in the inventory": [
+ "without stock": [
""
],
- "new price for the product": [
- "no se pudo actualizar el producto"
+ "Next restock": [
+ ""
],
- "the are value with errors": [
+ "Warehouse address": [
""
],
- "update product with new stock and price": [
+ "Add element to the list": [
""
],
- "There is no products yet, add more pressing the + sign": [
- "No hay propinas todavía, agregar mas presionando el signo +"
+ "Invalid amount": [
+ ""
],
- "product updated successfully": [
- "producto actualizado correctamente"
+ "Product identification to use in URLs (for internal use only).": [
+ ""
],
- "could not update the product": [
- "no se pudo actualizar el producto"
+ "Illustration of the product for customers.": [
+ ""
],
- "product delete successfully": [
- "producto fue eliminado correctamente"
+ "Product description for customers.": [
+ ""
],
- "could not delete the product": [
- "no se pudo eliminar el producto"
+ "Age restriction": [
+ ""
],
- "Product id:": [
- "Id de producto"
+ "Is this product restricted for customer below certain age?": [
+ ""
],
- "To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.": [
+ "Minimum age of the customer": [
""
],
- "If your system supports RFC 8905, you can do this by opening this URI:": [
+ "Unit name": [
""
],
- "it should be greater than 0": [
- "Debe ser mayor a 0"
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
+ ""
],
- "must be a valid URL": [
+ "Example: kg, items or liters": [
""
],
- "Initial balance": [
- "Instancia"
+ "Price per unit": [
+ ""
],
- "balance prior to deposit": [
+ "Sale price for customers, including taxes, for above units of the product.": [
""
],
- "Exchange URL": [
- "URL del Exchange"
+ "Stock": [
+ ""
],
- "URL of exchange": [
+ "Inventory for products with finite supply (for internal use only).": [
""
],
- "Next": [
- "Siguiente"
+ "Taxes included in the product price, exposed to customers.": [
+ ""
],
- "Wire method": [
+ "Categories": [
""
],
- "method to use for wire transfer": [
- "no se pudo informar la transferencia"
+ "Search by category description or id": [
+ ""
],
- "Select one wire method": [
+ "Categories where this product will be listed on.": [
""
],
- "could not create reserve": [
- "No se pudo create el reembolso"
+ "Product created successfully": [
+ ""
],
- "Valid until": [
- "Válido hasta"
+ "Could not create product": [
+ ""
],
- "Created balance": [
- "creado"
+ "Inventory": [
+ ""
],
- "Exchange balance": [
- "Monto inicial"
+ "Add product to inventory": [
+ ""
],
- "Picked up": [
+ "Sales": [
""
],
- "Committed": [
- "Monto confirmado"
+ "Sold": [
+ ""
],
- "Account address": [
- "Dirección de cuenta"
+ "Free": [
+ ""
],
- "Subject": [
- "Asunto"
+ "Go to product update page": [
+ ""
],
- "Tips": [
- "Propinas"
+ "Update": [
+ ""
],
- "No tips has been authorized from this reserve": [
+ "Remove this product from the database": [
""
],
- "Authorized": [
- "Token de autorización"
+ "Load more products after the last one": [
+ ""
],
- "Expiration": [
- "Información extra"
+ "Update the product with new price": [
+ ""
],
- "amount of tip": [
- "monto"
+ "Update product with new price": [
+ ""
],
- "Justification": [
- "Jurisdicción"
+ "Confirm update": [
+ ""
],
- "reason for the tip": [
+ "Add more elements to the inventory": [
""
],
- "URL after tip": [
+ "Report elements lost in the inventory": [
""
],
- "URL to visit after tip payment": [
+ "New price for the product": [
""
],
- "Reserves not yet funded": [
- "Servidor no encontrado"
+ "The are value with errors": [
+ ""
],
- "Reserves ready": [
+ "Update product with new stock and price": [
""
],
- "add new reserve": [
- "cargar nuevas transferencias"
+ "There is no products yet, add more pressing the + sign": [
+ ""
],
- "Expires at": [
+ "Jump to product with the given product ID": [
""
],
- "Initial": [
+ "Product id": [
""
],
- "delete selected reserve from the database": [
+ "Product updated successfully": [
""
],
- "authorize new tip from selected reserve": [
+ "Could not update the product": [
""
],
- "There is no ready reserves yet, add more pressing the + sign or fund them": [
- "No hay transferencias todavía, agregar mas presionando el signo +"
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
+ ""
],
- "Expected Balance": [
- "Ejecutado en"
+ "Could not delete the product": [
+ ""
],
- "could not create the tip": [
- "No se pudo create el reembolso"
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
+ ""
],
- "should not be empty": [
- "no puede ser vacío"
+ "Deleting an product can't be undone.": [
+ ""
+ ],
+ "Product id:": [
+ ""
],
- "should be greater that 0": [
- "Debe ser mayor a 0"
+ "Product (ID: %1$s) has been updated": [
+ ""
],
- "can't be empty": [
- "no puede ser vacío"
+ "Could not update product": [
+ ""
],
- "to short": [
+ "Invalid. only characters and numbers": [
""
],
- "just letters and numbers from 2 to 7": [
+ "Must be greater that 0": [
""
],
- "size of the key should be 32": [
+ "To short": [
""
],
"Identifier": [
@@ -4264,215 +7924,269 @@ strings['es'] = {
"Describe what this template stands for": [
""
],
- "Fixed summary": [
- "Estado de orden"
- ],
"If specified, this template will create order with the same summary": [
""
],
- "Fixed price": [
- "precio unitario"
+ "Summary is editable": [
+ ""
+ ],
+ "Allow the user to change the summary.": [
+ ""
],
"If specified, this template will create order with the same price": [
""
],
+ "Amount is editable": [
+ ""
+ ],
+ "Allow the user to select the amount to pay.": [
+ ""
+ ],
+ "Currency is editable": [
+ ""
+ ],
+ "Allow the user to change currency.": [
+ ""
+ ],
+ "Supported currencies": [
+ ""
+ ],
+ "Supported currencies: %1$s": [
+ ""
+ ],
"Minimum age": [
- "Edad mínima"
+ ""
],
"Is this contract restricted to some age?": [
""
],
"Payment timeout": [
- "Opciones de pago"
+ ""
],
"How much time has the customer to complete the payment once the order was created.": [
""
],
- "Verification algorithm": [
+ "OTP device": [
""
],
- "Algorithm to use to verify transaction in offline mode": [
+ "Use to verify transaction while offline.": [
""
],
- "Point-of-sale key": [
+ "No OTP device.": [
""
],
- "Useful to validate the purchase": [
+ "Add one first": [
""
],
- "generate random secret key": [
+ "No device": [
""
],
- "random": [
+ "Use to verify transaction in offline mode.": [
""
],
- "show secret key": [
+ "Template has been created": [
""
],
- "hide secret key": [
+ "Could not create template": [
""
],
- "hide": [
+ "Templates": [
""
],
- "show": [
+ "Add new templates": [
""
],
- "could not inform template": [
- "no se pudo informar la transferencia"
+ "Load more templates before the first one": [
+ ""
],
- "Amount is required": [
- "Login necesario"
+ "Delete selected templates from the database": [
+ ""
],
- "Order summary is required": [
+ "Use template to create new order": [
""
],
- "New order for template": [
- "cargar viejas transferencias"
+ "Use template": [
+ ""
],
- "Amount of the order": [
+ "Create qr code for the template": [
""
],
- "Order summary": [
- "Estado de orden"
+ "Load more templates after the last one": [
+ ""
],
- "could not create order from template": [
- "No se pudo create el reembolso"
+ "There is no templates yet, add more pressing the + sign": [
+ ""
],
- "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [
+ "Jump to template with the given template ID": [
""
],
- "Fixed amount": [
- "Monto reembolzado"
+ "Template identification": [
+ ""
],
- "Default amount": [
- "Monto reembolzado"
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
+ ""
],
- "Default summary": [
- "Estado de orden"
+ "Failed to delete template": [
+ ""
+ ],
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
+ ""
+ ],
+ "Deleting an template": [
+ ""
+ ],
+ "can't be undone": [
+ ""
],
"Print": [
""
],
- "Setup TOTP": [
+ "Too short": [
""
],
- "Templates": [
+ "Template (ID: %1$s) has been updated": [
""
],
- "add new templates": [
+ "Amount is required": [
""
],
- "load more templates before the first one": [
+ "Order summary is required": [
""
],
- "load newer templates": [
- "cargar nuevas transferencias"
+ "New order for template": [
+ ""
],
- "delete selected templates from the database": [
+ "Amount of the order": [
""
],
- "use template to create new order": [
+ "Order summary": [
""
],
- "create qr code for the template": [
- "No se pudo create el reembolso"
+ "Could not create order from template": [
+ ""
],
- "load more templates after the last one": [
+ "You need your access token to perform the operation": [
""
],
- "load older templates": [
- "cargar viejas transferencias"
+ "You are updating the access token from instance with id \"%1$s\"": [
+ ""
],
- "There is no templates yet, add more pressing the + sign": [
- "No hay propinas todavía, agregar mas presionando el signo +"
+ "This instance doesn't have authentication token.": [
+ ""
],
- "template delete successfully": [
- "producto fue eliminado correctamente"
+ "You can leave it empty if there is another layer of security.": [
+ ""
],
- "could not delete the template": [
- "no se pudo eliminar el producto"
+ "Current access token": [
+ ""
],
- "could not update template": [
- "no se pudo actualizar el producto"
+ "Clearing the access token will mean public access to the instance.": [
+ ""
],
- "should be one of '%1$s'": [
- "deberían ser iguales"
+ "Clear token": [
+ ""
],
- "Webhook ID to use": [
+ "Confirm change": [
""
],
- "Event": [
+ "Failed to clear token": [
""
],
- "The event of the webhook: why the webhook is used": [
+ "Failed to set new token": [
""
],
- "Method": [
+ "Slug": [
""
],
- "Method used by the webhook": [
+ "Token family slug to use in URLs (for internal use only)": [
""
],
- "URL": [
- "URL"
+ "Kind": [
+ ""
],
- "URL of the webhook where the customer will be redirected": [
+ "Token family kind": [
""
],
- "Header": [
+ "User-readable token family name": [
""
],
- "Header template of the webhook": [
+ "Token family description for customers": [
""
],
- "Body": [
+ "Valid After": [
""
],
- "Body template by the webhook": [
+ "Token family can issue tokens after this date": [
""
],
- "Webhooks": [
+ "Valid Before": [
""
],
- "add new webhooks": [
+ "Token family can issue tokens until this date": [
""
],
- "load more webhooks before the first one": [
+ "Duration": [
""
],
- "load newer webhooks": [
- "cargar nuevas ordenes"
+ "Validity duration of a issued token": [
+ ""
],
- "Event type": [
+ "Token familty created successfully": [
""
],
- "delete selected webhook from the database": [
+ "Could not create token family": [
""
],
- "load more webhooks after the last one": [
+ "Token Families": [
""
],
- "load older webhooks": [
- "cargar viejas ordenes"
+ "Add token family": [
+ ""
],
- "There is no webhooks yet, add more pressing the + sign": [
- "No hay propinas todavía, agregar mas presionando el signo +"
+ "Go to token family update page": [
+ ""
],
- "webhook delete successfully": [
- "producto fue eliminado correctamente"
+ "Remove this token family from the database": [
+ ""
],
- "could not delete the webhook": [
- "no se pudo eliminar el producto"
+ "There are no token families yet, add the first one by pressing the + sign.": [
+ ""
],
- "check the id, does not look valid": [
- "verificar el id, no parece válido"
+ "Token family updated successfully": [
+ ""
],
- "should have 52 characters, current %1$s": [
- "debería tener 52 caracteres, actualmente %1$s"
+ "Could not update the token family": [
+ ""
+ ],
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
+ ""
+ ],
+ "Failed to delete token family": [
+ ""
+ ],
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
+ ""
+ ],
+ "Deleting a token family %1$s .": [
+ ""
+ ],
+ "Token Family: %1$s": [
+ ""
+ ],
+ "Token familty updated successfully": [
+ ""
+ ],
+ "Could not update token family": [
+ ""
+ ],
+ "Check the id, does not look valid": [
+ ""
+ ],
+ "Must have 52 characters, current %1$s": [
+ ""
],
"URL doesn't have the right format": [
- "La URL no tiene el formato correcto"
+ ""
],
"Credited bank account": [
""
@@ -4484,9 +8198,12 @@ strings['es'] = {
""
],
"Wire transfer ID": [
- "Id de transferencia"
+ ""
+ ],
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ ""
],
- "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "Exchange URL": [
""
],
"Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
@@ -4498,497 +8215,995 @@ strings['es'] = {
"Actual amount that was wired to the merchant's bank account": [
""
],
- "could not inform transfer": [
- "no se pudo informar la transferencia"
+ "Wire transfer informed successfully": [
+ ""
],
- "Transfers": [
- "Transferencias"
+ "Could not inform transfer": [
+ ""
],
- "add new transfer": [
- "cargar nuevas transferencias"
+ "Transfers": [
+ ""
],
- "load more transfers before the first one": [
+ "Add new transfer": [
""
],
- "load newer transfers": [
- "cargar nuevas transferencias"
+ "Load more transfers before the first one": [
+ ""
],
"Credit": [
- "Crédito"
+ ""
],
"Confirmed": [
- "Confirmado"
+ ""
],
"Verified": [
- "Verificado"
+ ""
],
"Executed at": [
- "Ejecutado en"
+ ""
],
"yes": [
- "si"
+ ""
],
"no": [
- "no"
+ ""
],
- "unknown": [
- "desconocido"
+ "never": [
+ ""
],
- "delete selected transfer from the database": [
- "eliminar transferencia seleccionada de la base de datos"
+ "unknown": [
+ ""
],
- "load more transfer after the last one": [
- "cargue más transferencia luego de la última"
+ "Delete selected transfer from the database": [
+ ""
],
- "load older transfers": [
- "cargar viejas transferencias"
+ "Load more transfers after the last one": [
+ ""
],
"There is no transfer yet, add more pressing the + sign": [
- "No hay transferencias todavía, agregar mas presionando el signo +"
+ ""
],
- "filter by account address": [
- "Dirección de cuenta"
+ "All accounts": [
+ ""
],
- "only show wire transfers confirmed by the merchant": [
+ "Filter by account address": [
""
],
- "only show wire transfers claimed by the exchange": [
+ "Only show wire transfers confirmed by the merchant": [
+ ""
+ ],
+ "Only show wire transfers claimed by the exchange": [
""
],
"Unverified": [
- "Verificado"
+ ""
],
- "is not valid": [
+ "Wire transfer \"%1$s...\" has been deleted": [
""
],
- "is not a number": [
- "Número de edificio"
+ "Failed to delete transfer": [
+ ""
],
- "must be 1 or greater": [
- "debe ser 1 o mayor"
+ "Must be business or individual": [
+ ""
],
- "max 7 lines": [
- "máximo 7 líneas"
+ "Pay delay can't be greater than wire transfer delay": [
+ ""
+ ],
+ "Max 7 lines": [
+ ""
+ ],
+ "Doesn't match": [
+ ""
+ ],
+ "Enable access control": [
+ ""
+ ],
+ "Choose if the backend server should authenticate access.": [
+ ""
+ ],
+ "Access control is not yet decided. This instance can't be created.": [
+ ""
+ ],
+ "Authorization must be handled externally.": [
+ ""
],
- "change authorization configuration": [
- "cambiar configuración de autorización"
+ "Authorization is handled by the backend server.": [
+ ""
],
"Need to complete marked fields and choose authorization method": [
- "Necesita completar campos marcados y escoger un método de autorización"
+ ""
],
- "This is not a valid bitcoin address.": [
- "Esta no es una dirección de bitcoin válida."
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ ""
],
- "This is not a valid Ethereum address.": [
- "Esta no es una dirección de Ethereum válida."
+ "Business name": [
+ ""
],
- "IBAN numbers usually have more that 4 digits": [
- "Números IBAN usualmente tienen más de 4 dígitos"
+ "Legal name of the business represented by this instance.": [
+ ""
],
- "IBAN numbers usually have less that 34 digits": [
- "Número IBAN usualmente tienen menos de 34 dígitos"
+ "Email": [
+ ""
],
- "IBAN country code not found": [
- "Código IBAN de país no encontrado"
+ "Contact email": [
+ ""
],
- "IBAN number is not valid, checksum is wrong": [
- "Número IBAN no es válido, la suma de verificación es incorrecta"
+ "Website URL": [
+ ""
],
- "Target type": [
- "Tipo objetivo"
+ "URL.": [
+ ""
],
- "Method to use for wire transfer": [
- "Método a usar para la transferencia"
+ "Logo": [
+ ""
],
- "Routing": [
- "Enrutamiento"
+ "Logo image.": [
+ ""
],
- "Routing number.": [
- "Número de enrutamiento."
+ "Physical location of the merchant.": [
+ ""
],
- "Account": [
- "Cuenta"
+ "Jurisdiction": [
+ ""
],
- "Account number.": [
- "Dirección de cuenta"
+ "Jurisdiction for legal disputes with the merchant.": [
+ ""
],
- "Business Identifier Code.": [
+ "Pay transaction fee": [
""
],
- "Bank Account Number.": [
+ "Assume the cost of the transaction of let the user pay for it.": [
""
],
- "Unified Payment Interface.": [
- "Interfaz de pago unificado."
+ "Default payment delay": [
+ ""
],
- "Bitcoin protocol.": [
+ "Time customers have to pay an order before the offer expires by default.": [
""
],
- "Ethereum protocol.": [
+ "Default wire transfer delay": [
""
],
- "Interledger protocol.": [
+ "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
""
],
- "Host": [
+ "Instance id": [
""
],
- "Bank host.": [
+ "Failed to update instance": [
""
],
- "Bank account.": [
+ "Must be \"pay\" or \"refund\"": [
""
],
- "Bank account owner's name.": [
+ "Must be one of '%1$s'": [
""
],
- "No accounts yet.": [
+ "Webhook ID to use": [
""
],
- "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Event": [
""
],
- "Business name": [
- "Nombre de edificio"
+ "Pay": [
+ ""
],
- "Legal name of the business represented by this instance.": [
+ "The event of the webhook: why the webhook is used": [
""
],
- "Email": [
+ "Method": [
""
],
- "Contact email": [
+ "GET": [
""
],
- "Website URL": [
- "URL de sitio web"
+ "POST": [
+ ""
],
- "URL.": [
+ "PUT": [
""
],
- "Logo": [
+ "PATCH": [
""
],
- "Logo image.": [
+ "HEAD": [
""
],
- "Bank account": [
- "Cuenta bancaria"
+ "Method used by the webhook": [
+ ""
],
- "URI specifying bank account for crediting revenue.": [
+ "URL": [
""
],
- "Default max deposit fee": [
- "Impuesto máximo de deposito por omisión"
+ "URL of the webhook where the customer will be redirected": [
+ ""
],
- "Maximum deposit fees this merchant is willing to pay per order by default.": [
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
""
],
- "Default max wire fee": [
- "Impuesto máximo de transferencia por omisión"
+ "For example %1$s will be replaced with the the order's price": [
+ ""
],
- "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [
+ "The short list of variables are:": [
""
],
- "Default wire fee amortization": [
- "Amortización de impuesto de transferencia por omisión"
+ "order's description": [
+ ""
],
- "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [
+ "order's price": [
""
],
- "Physical location of the merchant.": [
+ "order's unique identification": [
""
],
- "Jurisdiction": [
- "Jurisdicción"
+ "the amount that was being refunded": [
+ ""
],
- "Jurisdiction for legal disputes with the merchant.": [
- "Jurisdicción para disputas legales con el comerciante."
+ "the reason entered by the merchant staff for granting the refund": [
+ ""
],
- "Default payment delay": [
- "Retrazo de pago por omisión"
+ "time of the refund in nanoseconds since 1970": [
+ ""
],
- "Time customers have to pay an order before the offer expires by default.": [
+ "Http body": [
""
],
- "Default wire transfer delay": [
- "Retrazo de transferencia por omisión"
+ "Body template by the webhook": [
+ ""
],
- "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
+ "Webhook create successfully": [
""
],
- "Instance id": [
- "ID de instancia"
+ "Could not create the webhook": [
+ ""
],
- "Change the authorization method use for this instance.": [
- "Limpiar el token de autorización significa acceso público a la instancia"
+ "Could not create webhook": [
+ ""
],
- "Manage access token": [
- "Administrar token de acceso"
+ "Webhooks": [
+ ""
],
- "Failed to create instance": [
- "Fallo al crear la instancia"
+ "Add new webhooks": [
+ ""
],
- "Login required": [
- "Login necesario"
+ "Load more webhooks before the first one": [
+ ""
],
- "Please enter your access token.": [
+ "Event type": [
""
],
- "Access Token": [
- "Acceso denegado"
+ "Delete selected webhook from the database": [
+ ""
],
- "The request to the backend take too long and was cancelled": [
+ "Load more webhooks after the last one": [
""
],
- "Diagnostic from %1$s is \"%2$s\"": [
+ "There is no webhooks yet, add more pressing the + sign": [
""
],
- "The backend reported a problem: HTTP status #%1$s": [
- "Servidir reporto un problema: HTTP status #%1$s"
+ "Webhook delete successfully": [
+ ""
],
- "Diagnostic from %1$s is '%2$s'": [
+ "Could not delete the webhook": [
""
],
- "Access denied": [
- "Acceso denegado"
+ "Header": [
+ ""
],
- "The access token provided is invalid.": [
+ "Header template of the webhook": [
""
],
- "No 'default' instance configured yet.": [
- "Sin instancia default"
+ "Body": [
+ ""
],
- "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Webhook updated": [
""
],
- "The access token provided is invalid": [
+ "Could not update webhook": [
""
],
- "Hide for today": [
+ "Language": [
""
],
- "Instance": [
- "Instancia"
+ "Advance order creation": [
+ ""
],
- "Settings": [
- "Configuración"
+ "Shows more options in the order creation form": [
+ ""
],
- "Connection": [
- "Conexión"
+ "Advance instance settings": [
+ ""
],
- "New": [
- "Nuevo"
+ "Shows more options in the instance settings form": [
+ ""
],
- "List": [
- "Lista"
+ "Date format": [
+ ""
],
- "Log out": [
- "Salir"
+ "How the date is going to be displayed": [
+ ""
],
- "Check your token is valid": [
- "Verifica que el token sea valido"
+ "Developer mode": [
+ ""
],
- "Couldn't access the server.": [
- "No se pudo acceder al servidor."
+ "Shows more options and tools which are not intended for general audience.": [
+ ""
],
- "Could not infer instance id from url %1$s": [
- "No se pudo inferir el id de la instancia con la url %1$s"
+ "Total products": [
+ ""
],
- "Server not found": [
- "Servidor no encontrado"
+ "Delete selected category from the database": [
+ ""
],
- "Server response with an error code": [
+ "There is no categories yet, add more pressing the + sign": [
""
],
- "Got message %1$s from %2$s": [
- "Recibimos el mensaje %1$s desde %2$s"
+ "Category delete successfully": [
+ ""
],
- "Response from server is unreadable, http status: %1$s": [
+ "Could not delete the category": [
""
],
- "Unexpected Error": [
- "Error inesperado"
+ "Category name": [
+ ""
],
- "The value %1$s is invalid for a payment url": [
- "El valor %1$s es invalido para una URL de pago"
+ "Category added successfully": [
+ ""
],
- "add element to the list": [
- "agregar elemento a la lista"
+ "Could not add category": [
+ ""
],
- "add": [
- "Agregar"
+ "Id:": [
+ ""
+ ],
+ "Name of the category": [
+ ""
+ ],
+ "Products": [
+ ""
+ ],
+ "Search by product description or id": [
+ ""
+ ],
+ "Products that this category will list.": [
+ ""
+ ],
+ "Could not update category": [
+ ""
+ ],
+ "Category id is unknown": [
+ ""
+ ],
+ "Without this the merchant backend will refuse to create new orders.": [
+ ""
+ ],
+ "Hide for today": [
+ ""
+ ],
+ "KYC verification needed": [
+ ""
+ ],
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
+ ""
+ ],
+ "Configuration": [
+ ""
+ ],
+ "Settings": [
+ "Impostazioni"
+ ],
+ "Access token": [
+ ""
+ ],
+ "Connection": [
+ ""
+ ],
+ "Interface": [
+ ""
+ ],
+ "List": [
+ ""
+ ],
+ "Log out": [
+ ""
+ ],
+ "Failed to create instance": [
+ ""
+ ],
+ "checking compatibility with server...": [
+ ""
+ ],
+ "Contacting the server failed": [
+ ""
+ ],
+ "The server version is not supported": [
+ ""
+ ],
+ "Supported version \"%1$s\", server version \"%2$s\".": [
+ ""
],
"Deleting": [
- "Borrando"
+ ""
],
"Changing": [
- "Cambiando"
+ ""
+ ],
+ "Manage access token": [
+ ""
+ ],
+ "Business Name": [
+ ""
],
"Order ID": [
- "ID de pedido"
+ ""
],
"Payment URL": [
- "URL de pago"
+ ""
]
}
- }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "it",
+ "completeness": 1
};
strings['fr'] = {
- "domain": "messages",
"locale_data": {
"messages": {
"": {
"domain": "messages",
- "plural_forms": "nplurals=2; plural=(n != 1);",
- "lang": ""
+ "plural_forms": "nplurals=2; plural=(n!=1);",
+ "lang": "fr"
},
+ "The request reached a timeout, check your connection.": [
+ "La demande a dépassé le temps de traitement maximum, vérifiez votre connexion."
+ ],
+ "The request was cancelled.": [
+ "La demande a été annulée."
+ ],
+ "A lot of request were made to the same server and this action was throttled.": [
+ "Un grand nombre de demandes ont été adressées au même serveur et cette action a été ralentie."
+ ],
+ "The response of the request is malformed.": [
+ "La réponse de la demande est malformée."
+ ],
+ "Could not complete the request due to a network problem.": [
+ "La demande n'a pas pu être traitée en raison d'un problème de réseau."
+ ],
+ "Unexpected request error.": [
+ "Erreur inattendue sur la requête."
+ ],
+ "Unexpected error.": [
+ "Erreur inattendue."
+ ],
"Cancel": [
- ""
+ "Annuler"
],
"%1$s": [
- ""
+ "%1$s"
],
"Close": [
- ""
+ "Fermer"
],
"Continue": [
- ""
+ "Continuer"
],
"Clear": [
- ""
+ "Effacer"
],
"Confirm": [
+ "Confirmer"
+ ],
+ "Required": [
+ "Obligatoire"
+ ],
+ "Letter must be a JSON string": [
+ "La lettre doit être une chaîne JSON"
+ ],
+ "JSON string is invalid": [
+ "La chaine JSON est invalide"
+ ],
+ "Import": [
+ "Importer"
+ ],
+ "Importing an account from the bank": [
+ "Importer un compte depuis la banque"
+ ],
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
+ "Vous pouvez exporter les paramètres de votre compte à partir du profil Libeufin de compte de votre banque. Collez le contenu dans le champ suivant."
+ ],
+ "Account information": [
+ "Informations sur le compte"
+ ],
+ "Correct form": [
+ "Formulaire correct"
+ ],
+ "Comparing account details": [
+ "Comparaison des détails du compte"
+ ],
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
+ "Le test de l'URL des informations du compte a réussi mais les informations sur le compte retournées sont différentes de celles du formulaire des détails du compte."
+ ],
+ "Field": [
+ "Champs"
+ ],
+ "In the form": [
+ "Dans le formulaire"
+ ],
+ "Reported": [
+ "Rapporté"
+ ],
+ "Type": [
+ "Type"
+ ],
+ "IBAN": [
+ "IBAN"
+ ],
+ "Address": [
+ "Adresse"
+ ],
+ "Host": [
+ "Hôte"
+ ],
+ "Account id": [
+ "Identifiant de compte"
+ ],
+ "Owner's name": [
+ "Nom du propriétaire"
+ ],
+ "Account": [
+ "Compte"
+ ],
+ "Bank host": [
+ "Serveur de la banque."
+ ],
+ "Bank account": [
""
],
- "is not the same as the current access token": [
+ "BIC": [
""
],
- "cannot be empty": [
+ "Ok": [
""
],
- "cannot be the same as the old token": [
+ "Validate bank account: %1$s": [
""
],
- "is not the same": [
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
""
],
- "You are updating the access token from instance with id %1$s": [
+ "Step 1:": [
""
],
- "Old access token": [
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
""
],
- "access token currently in use": [
+ "Subject": [
""
],
- "New access token": [
+ "Step 2:": [
""
],
- "next access token to be used": [
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
""
],
- "Repeat access token": [
+ "Receiver name": [
""
],
- "confirm the same access token": [
+ "Step 3:": [
""
],
- "Clearing the access token will mean public access to the instance": [
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
""
],
- "cannot be the same as the old access token": [
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
""
],
- "You are setting the access token for the new instance": [
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
""
],
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
+ "Si vous supprimez l'instance nommée %1$s (ID : %2$s), le commerçant ne sera plus en mesure de traiter les commandes ou les remboursements"
+ ],
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
+ "Cette action supprime la clé privée de l'instance, mais préserve toutes les données de transaction. Vous pouvez toujours accéder à ces données après avoir supprimé l'instance."
+ ],
+ "Deleting an instance %1$s .": [
+ "Suppression d'une instance %1$s ."
+ ],
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
+ "Si vous purgez l'instance nommée %1$s (ID : %2$s), vous supprimerez également toutes ses données de transaction."
+ ],
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
+ "L'instance disparaîtra de votre liste et vous ne pourrez plus accéder à ses données."
+ ],
+ "Purging an instance %1$s .": [
+ "Purge d'une instance %1$s ."
+ ],
+ "Is not the same as the current access token": [
+ "N'est pas identique au jeton d'accès actuel"
+ ],
+ "Can't be the same as the old token": [
+ "Il ne peut pas s'agir du même jeton que l'ancien"
+ ],
+ "Is not the same": [
+ "N'est pas le même"
+ ],
+ "You are updating the access token from instance with id %1$s": [
+ "Vous mettez à jour le jeton d'accès de l'instance avec l'identifiant %1$s"
+ ],
+ "Old access token": [
+ "Ancien jeton d'accès"
+ ],
+ "Access token currently in use": [
+ "Jeton d'accès actuellement utilisé"
+ ],
+ "New access token": [
+ "Nouveau jeton d'accès"
+ ],
+ "Next access token to be used": [
+ "Prochain jeton d'accès utilisé"
+ ],
+ "Repeat access token": [
+ "Répétez le jeton d'accès"
+ ],
+ "Confirm the same access token": [
+ "Confirmez le même jeton d'accès"
+ ],
+ "Clearing the access token will mean public access to the instance": [
+ "L'effacement du jeton d'accès signifie que l'instance est accessible à tout le monde"
+ ],
+ "Can't be the same as the old access token": [
+ "Ne peut pas être le même que l'ancien jeton d'accès"
+ ],
+ "You are setting the access token for the new instance": [
+ "Vous définissez le jeton d'accès pour la nouvelle instance"
+ ],
"With external authorization method no check will be done by the merchant backend": [
- ""
+ "Avec la méthode d'autorisation externe, aucun contrôle n'est effectué par le backend du commerçant"
],
"Set external authorization": [
- ""
+ "Définir une autorisation externe"
],
"Set access token": [
- ""
+ "Définir un jeton d'accès"
],
"Operation in progress...": [
- ""
+ "Opération en cours..."
],
"The operation will be automatically canceled after %1$s seconds": [
- ""
+ "L'opération sera automatiquement annulée après %1$s secondes"
+ ],
+ "Your password is incorrect": [
+ "Votre mot de passe est incorrect"
+ ],
+ "Your instance not found": [
+ "Votre instance n'a pas été trouvée"
+ ],
+ "Login required": [
+ "Login obligatoire"
+ ],
+ "Please enter your access token for %1$s.": [
+ "Veuillez saisir votre code d'accès pour %1$s."
+ ],
+ "Access Token": [
+ "Jeton d'accès"
],
"Instances": [
- ""
+ "Instances"
],
"Delete": [
+ "Effacer"
+ ],
+ "Add new instance": [
+ "Ajouter une nouvelle instance"
+ ],
+ "ID": [
+ "Identifiant"
+ ],
+ "Name": [
+ "Nom"
+ ],
+ "Edit": [
+ "Editer"
+ ],
+ "Purge": [
+ "Purger"
+ ],
+ "There is no instances yet, add more pressing the + sign": [
+ "Il n'y a pas encore d'instances, ajoutez-en en appuyant sur le signe +"
+ ],
+ "Only show active instances": [
+ "N'afficher que les instances actives"
+ ],
+ "Active": [
+ "Actives"
+ ],
+ "Only show deleted instances": [
+ "N'afficher que les instances effacées"
+ ],
+ "Deleted": [
+ "Effacées"
+ ],
+ "Show all instances": [
+ "Afficher toutes les instances"
+ ],
+ "All": [
+ "Toutes"
+ ],
+ "Instance \"%1$s\" (ID: %2$s) has been deleted": [
+ "L'instance \"%1$s\" (identifiant : %2$s) a été effacée"
+ ],
+ "Failed to delete instance": [
+ "Echec de la suppression de l'instance"
+ ],
+ "Instance '%1$s' (ID: %2$s) has been purge": [
+ "L'instance '%1$s' (identifiant : %2$s) a été totalement purgée"
+ ],
+ "Failed to purge instance": [
+ "Echec de la purge de l'instance"
+ ],
+ "Loading...": [
+ "Chargement ..."
+ ],
+ "This is not a valid bitcoin address.": [
+ "Ceci n'est pas une adresse Bitcoin valide."
+ ],
+ "This is not a valid Ethereum address.": [
+ "Ceci n'est pas une adresse Ethereum valide."
+ ],
+ "This is not a valid host.": [
+ "Ceci n'est pas un serveur valide."
+ ],
+ "IBAN numbers usually have more that 4 digits": [
+ "Les numéros IBAN comportent généralement plus de 4 chiffres"
+ ],
+ "IBAN numbers usually have less that 34 digits": [
+ "Les numéros IBAN comportent généralement moins de 34 chiffres"
+ ],
+ "IBAN country code not found": [
+ "Le code pays de l'IBAN n'a pas été trouvé"
+ ],
+ "IBAN number is invalid, checksum is wrong": [
+ "Le numéro IBAN n'est pas valide, la somme de contrôle est erronée"
+ ],
+ "Choose one...": [
+ "Choisissez un ..."
+ ],
+ "Method to use for wire transfer": [
+ "Méthode à utiliser pour le virement bancaire"
+ ],
+ "Routing": [
+ "Code bancaire"
+ ],
+ "Routing number.": [
+ "Code bancaire."
+ ],
+ "Account number.": [
+ "Numéro de compte."
+ ],
+ "Code": [
+ "Code"
+ ],
+ "Business Identifier Code.": [
+ "Code BIC de la banque."
+ ],
+ "International Bank Account Number.": [
+ "Code IBAN."
+ ],
+ "Unified Payment Interface.": [
+ "Interface de paiement unifiée (Unified Payment Interface)."
+ ],
+ "Bitcoin protocol.": [
+ "Protocole Bitcoin."
+ ],
+ "Ethereum protocol.": [
+ "Protocole Ethereum."
+ ],
+ "Interledger protocol.": [
+ "Protocole Interledger."
+ ],
+ "Bank host.": [
+ "Serveur de la banque."
+ ],
+ "Without scheme and may include subpath:": [
+ "Sans schéma et peut inclure un sous-chemin :"
+ ],
+ "Bank account.": [
+ "Compte en banque."
+ ],
+ "Legal name of the person holding the account.": [
+ "Nom légal de la personne titulaire du compte."
+ ],
+ "It should match the bank account name.": [
+ "Il doit correspondre au nom du titulaire du compte bancaire."
+ ],
+ "Invalid url": [
+ "URL invalide"
+ ],
+ "URL must end with a '/'": [
+ "L'URL doit terminer avec un '/'"
+ ],
+ "URL must not contain params": [
+ "L'URL ne doit pas contenir de parametres"
+ ],
+ "URL must not hash param": [
+ "L'URL ne doit pas comporter de paramètre de hachage"
+ ],
+ "The request to check the revenue API failed.": [
+ "Echec de la requête à l'API de verification des revenus."
+ ],
+ "Server replied with \"bad request\".": [
+ "Le serveur a répondu \"Mauvaise requête\"."
+ ],
+ "Unauthorized, check credentials.": [
+ "Non autorisé, vérifiez les informations d'identification."
+ ],
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
+ "Ce endpoint ne semble par ressembler à une URL Taler Revenue."
+ ],
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
""
],
- "add new instance": [
+ "Account:": [
+ "Compte :"
+ ],
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
+ "Si la banque supporte l'API Taler Revenue, vous pouvez ajouter l'URL du endpoint ci-dessous pour garder les informations sur les revenus synchronisées."
+ ],
+ "Endpoint URL": [
+ "URL du endpoint"
+ ],
+ "From where the merchant can download information about incoming wire transfers to this account": [
+ "Endroit d'où le commerçant peut télécharger des informations sur les virements entrants sur ce compte"
+ ],
+ "Auth type": [
+ "Type d'authentification"
+ ],
+ "Choose the authentication type for the account info URL": [
+ "Choisir le type d'authentification pour l'URL des info sur le compte"
+ ],
+ "Without authentication": [
+ "Aucune authentification"
+ ],
+ "With password": [
+ "Mot de passe"
+ ],
+ "With token": [
""
],
- "ID": [
+ "Do not change": [
+ "Ne pas changer"
+ ],
+ "Username": [
+ "Nom d'utilisateur"
+ ],
+ "Username to access the account information.": [
+ "Nom d'utilisateur pour accéder aux informations sur le compte."
+ ],
+ "Password": [
+ "Mot de passe"
+ ],
+ "Password to access the account information.": [
""
],
- "Name": [
+ "Token": [
""
],
- "Edit": [
+ "Access token to access the account information.": [
+ "Nom d'utilisateur pour accéder aux informations sur le compte."
+ ],
+ "Match": [
""
],
- "Purge": [
+ "Check where the information match against the server info.": [
""
],
- "There is no instances yet, add more pressing the + sign": [
+ "Not verified": [
""
],
- "Only show active instances": [
+ "Last test was ok": [
""
],
- "Active": [
+ "Last test failed": [
""
],
- "Only show deleted instances": [
+ "Compare info from server with account form": [
""
],
- "Deleted": [
+ "Test": [
""
],
- "Show all instances": [
+ "Need to complete marked fields": [
""
],
- "All": [
+ "Confirm operation": [
""
],
- "Instance \"%1$s\" (ID: %2$s) has been deleted": [
+ "Account details": [
""
],
- "Failed to delete instance": [
+ "Import from bank": [
""
],
- "Instance '%1$s' (ID: %2$s) has been disabled": [
+ "Could not create account": [
""
],
- "Failed to purge instance": [
+ "No 'default' instance configured yet.": [
""
],
- "Pending KYC verification": [
+ "Create a 'default' instance to begin using the merchant backoffice.": [
""
],
- "Timed out": [
+ "Bank accounts": [
""
],
- "Exchange": [
+ "Add new account": [
""
],
- "Target account": [
+ "Wire method: Bitcoin": [
""
],
- "KYC URL": [
+ "Sewgit 1": [
""
],
- "Code": [
+ "Sewgit 2": [
+ ""
+ ],
+ "Delete selected accounts from the database": [
+ ""
+ ],
+ "Wire method: x-taler-bank": [
+ ""
+ ],
+ "Account name": [
+ ""
+ ],
+ "Wire method: IBAN": [
+ ""
+ ],
+ "Other accounts": [
+ ""
+ ],
+ "Path": [
+ ""
+ ],
+ "There is no accounts yet, add more pressing the + sign": [
+ ""
+ ],
+ "You need to associate a bank account to receive revenue.": [
+ ""
+ ],
+ "Without this the you won't be able to create new orders.": [
+ ""
+ ],
+ "Bank account delete successfully": [
+ ""
+ ],
+ "Could not delete the bank account": [
+ ""
+ ],
+ "Could not update account": [
+ ""
+ ],
+ "Could not delete account": [
+ ""
+ ],
+ "Pending KYC verification": [
+ ""
+ ],
+ "Exchange": [
+ "Service de paiement"
+ ],
+ "Reason": [
+ ""
+ ],
+ "Pending KYC process, click here to complete": [
+ ""
+ ],
+ "The exchange require a account verification.": [
""
],
"Http Status": [
@@ -4997,25 +9212,52 @@ strings['fr'] = {
"No pending kyc verification!": [
""
],
- "change value to unknown date": [
+ "Change value to unknown date": [
""
],
- "change value to empty": [
+ "Change value to empty": [
""
],
- "clear": [
+ "Change value to never": [
""
],
- "change value to never": [
+ "Never": [
""
],
- "never": [
+ "days": [
""
],
- "Country": [
+ "hours": [
""
],
- "Address": [
+ "minutes": [
+ ""
+ ],
+ "seconds": [
+ ""
+ ],
+ "Forever": [
+ ""
+ ],
+ "%1$sM": [
+ ""
+ ],
+ "%1$sY": [
+ ""
+ ],
+ "%1$sd": [
+ ""
+ ],
+ "%1$sh": [
+ ""
+ ],
+ "%1$smin": [
+ ""
+ ],
+ "%1$ssec": [
+ ""
+ ],
+ "Country": [
""
],
"Building number": [
@@ -5042,19 +9284,13 @@ strings['fr'] = {
"Country subdivision": [
""
],
- "Product id": [
- ""
- ],
"Description": [
""
],
- "Product": [
+ "Enter description or id": [
""
],
- "search products by it's description or id": [
- ""
- ],
- "no products found with that description": [
+ "no match found with that description or id": [
""
],
"You must enter a valid product identifier.": [
@@ -5066,16 +9302,19 @@ strings['fr'] = {
"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
""
],
+ "Search product": [
+ ""
+ ],
"Quantity": [
""
],
- "how many products will be added": [
+ "How many products will be added": [
""
],
"Add from inventory": [
""
],
- "Image should be smaller than 1 MB": [
+ "Image must be smaller than 1 MB": [
""
],
"Add": [
@@ -5084,6 +9323,12 @@ strings['fr'] = {
"Remove": [
""
],
+ "Invalid": [
+ ""
+ ],
+ "This product has %1$s applicable taxes configured.": [
+ ""
+ ],
"No taxes configured for this product.": [
""
],
@@ -5099,10 +9344,10 @@ strings['fr'] = {
"Legal name of the tax, e.g. VAT or import duties.": [
""
],
- "add tax to the tax list": [
+ "Add tax to the tax list": [
""
],
- "describe and add a product that is not in the inventory list": [
+ "Describe and add a product that is not in the inventory list": [
""
],
"Add custom product": [
@@ -5111,76 +9356,76 @@ strings['fr'] = {
"Complete information of the product": [
""
],
- "Image": [
+ "Must be a number": [
""
],
- "photo of the product": [
+ "Must be grater than 0": [
""
],
- "full product description": [
+ "Image": [
""
],
- "Unit": [
+ "Photo of the product.": [
""
],
- "name of the product unit": [
+ "Full product description.": [
""
],
- "Price": [
+ "Unit": [
""
],
- "amount in the current currency": [
+ "Name of the product unit.": [
""
],
- "Taxes": [
+ "Price": [
""
],
- "image": [
+ "Amount in the current currency.": [
""
],
- "description": [
+ "How many products will be added.": [
""
],
- "quantity": [
+ "Taxes": [
""
],
- "unit price": [
+ "Unit price": [
""
],
- "total price": [
+ "Total price": [
""
],
- "required": [
+ "Must be greater than 0": [
""
],
- "not valid": [
+ "Refund deadline can't be before pay deadline": [
""
],
- "must be greater than 0": [
+ "Wire transfer deadline can't be before refund deadline": [
""
],
- "not a valid json": [
+ "Wire transfer deadline can't be before pay deadline": [
""
],
- "should be in the future": [
+ "Must have a refund deadline": [
""
],
- "refund deadline cannot be before pay deadline": [
+ "Auto refund can't be after refund deadline": [
""
],
- "wire transfer deadline cannot be before refund deadline": [
+ "Must be in the future": [
""
],
- "wire transfer deadline cannot be before pay deadline": [
+ "Simple": [
""
],
- "should have a refund deadline": [
+ "Advanced": [
""
],
- "auto refund cannot be after refund deadline": [
+ "Manage products in order": [
""
],
- "Manage products in order": [
+ "%1$s products with a total price of %2$s.": [
""
],
"Manage list of products in the order.": [
@@ -5189,10 +9434,7 @@ strings['fr'] = {
"Remove this product from the order.": [
""
],
- "Total price": [
- ""
- ],
- "total product price added up": [
+ "Total product price added up": [
""
],
"Amount to be paid by the customer": [
@@ -5201,7 +9443,7 @@ strings['fr'] = {
"Order price": [
""
],
- "final order price": [
+ "Final order price": [
""
],
"Summary": [
@@ -5222,7 +9464,7 @@ strings['fr'] = {
"Location": [
""
],
- "address where the products will be delivered": [
+ "Address where the products will be delivered": [
""
],
"Fulfillment URL": [
@@ -5237,52 +9479,43 @@ strings['fr'] = {
"Override default Taler payment settings for this order": [
""
],
- "Payment deadline": [
- ""
- ],
- "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [
- ""
- ],
- "Refund deadline": [
+ "Payment time": [
""
],
- "Time until which the order can be refunded by the merchant.": [
- ""
- ],
- "Wire transfer deadline": [
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
""
],
- "Deadline for the exchange to make the wire transfer.": [
+ "Default": [
""
],
- "Auto-refund deadline": [
+ "Refund time": [
""
],
- "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
""
],
- "Maximum deposit fee": [
+ "Wire transfer time": [
""
],
- "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
""
],
- "Maximum wire fee": [
+ "Auto-refund time": [
""
],
- "Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.": [
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
""
],
- "Wire fee amortization": [
+ "Maximum fee": [
""
],
- "Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.": [
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
""
],
"Create token": [
""
],
- "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
""
],
"Minimum age required": [
@@ -5294,6 +9527,9 @@ strings['fr'] = {
"Min age defined by the producs is %1$s": [
""
],
+ "No product with age restriction in this order": [
+ ""
+ ],
"Additional information": [
""
],
@@ -5303,46 +9539,34 @@ strings['fr'] = {
"You must enter a value in JavaScript Object Notation (JSON).": [
""
],
- "days": [
- ""
- ],
- "hours": [
- ""
- ],
- "minutes": [
- ""
- ],
- "seconds": [
+ "Custom field name": [
""
],
- "forever": [
+ "Disabled": [
""
],
- "%1$sM": [
+ "No deadline": [
""
],
- "%1$sY": [
+ "Deadline at %1$s": [
""
],
- "%1$sd": [
+ "Could not create order": [
""
],
- "%1$sh": [
- ""
- ],
- "%1$smin": [
+ "No exchange would accept a payment because of KYC requirements.": [
""
],
- "%1$ssec": [
+ "No more stock for product with id \"%1$s\".": [
""
],
"Orders": [
""
],
- "create order": [
+ "Create order": [
""
],
- "load newer orders": [
+ "Load first page": [
""
],
"Date": [
@@ -5354,61 +9578,46 @@ strings['fr'] = {
"copy url": [
""
],
- "load older orders": [
- ""
- ],
- "No orders have been found matching your query!": [
- ""
- ],
- "duplicated": [
- ""
- ],
- "invalid format": [
+ "Load more orders after the last one": [
""
],
- "this value exceed the refundable amount": [
+ "Load next page": [
""
],
- "date": [
+ "No orders have been found matching your query!": [
""
],
- "amount": [
+ "Duplicated": [
""
],
- "reason": [
+ "This value exceed the refundable amount": [
""
],
- "amount to be refunded": [
+ "Amount to be refunded": [
""
],
"Max refundable:": [
""
],
- "Reason": [
- ""
- ],
- "Choose one...": [
- ""
- ],
- "requested by the customer": [
+ "Requested by the customer": [
""
],
- "other": [
+ "Other": [
""
],
- "why this order is being refunded": [
+ "Why this order is being refunded": [
""
],
- "more information to give context": [
+ "More information to give context": [
""
],
"Contract Terms": [
""
],
- "human-readable description of the whole purchase": [
+ "Human-readable description of the whole purchase": [
""
],
- "total price for the transaction": [
+ "Total price for the transaction": [
""
],
"URL for this purchase": [
@@ -5417,58 +9626,58 @@ strings['fr'] = {
"Max fee": [
""
],
- "maximum total deposit fee accepted by the merchant for this contract": [
+ "Maximum total deposit fee accepted by the merchant for this contract": [
""
],
- "Max wire fee": [
+ "Created at": [
""
],
- "maximum wire fee accepted by the merchant": [
+ "Time when this contract was generated": [
""
],
- "over how many customer transactions does the merchant expect to amortize wire fees on average": [
+ "Refund deadline": [
""
],
- "Created at": [
+ "After this deadline has passed no refunds will be accepted": [
""
],
- "time when this contract was generated": [
+ "Payment deadline": [
""
],
- "after this deadline has passed no refunds will be accepted": [
+ "After this deadline, the merchant won't accept payments for the contract": [
""
],
- "after this deadline, the merchant won't accept payments for the contract": [
+ "Wire transfer deadline": [
""
],
- "transfer deadline for the exchange": [
+ "Transfer deadline for the exchange": [
""
],
- "time indicating when the order should be delivered": [
+ "Time indicating when the order should be delivered": [
""
],
- "where the order will be delivered": [
+ "Where the order will be delivered": [
""
],
"Auto-refund delay": [
""
],
- "how long the wallet should try to get an automatic refund for the purchase": [
+ "How long the wallet should try to get an automatic refund for the purchase": [
""
],
"Extra info": [
""
],
- "extra data that is only interpreted by the merchant frontend": [
+ "Extra data that is only interpreted by the merchant frontend": [
""
],
"Order": [
""
],
- "claimed": [
+ "Claimed": [
""
],
- "claimed at": [
+ "Claimed at": [
""
],
"Timeline": [
@@ -5483,22 +9692,22 @@ strings['fr'] = {
"Product list": [
""
],
- "paid": [
+ "Paid": [
""
],
- "wired": [
+ "Wired": [
""
],
- "refunded": [
+ "Refunded": [
""
],
- "refund order": [
+ "Refund order": [
""
],
- "not refundable": [
+ "Not refundable": [
""
],
- "refund": [
+ "Next event in": [
""
],
"Refunded amount": [
@@ -5513,13 +9722,10 @@ strings['fr'] = {
"Refund URI": [
""
],
- "unpaid": [
- ""
- ],
- "pay at": [
+ "Unpaid": [
""
],
- "created at": [
+ "Pay at": [
""
],
"Order status URL": [
@@ -5534,331 +9740,337 @@ strings['fr'] = {
"Back": [
""
],
- "refund created successfully": [
+ "Refund created successfully": [
""
],
- "could not create the refund": [
+ "Could not create the refund": [
""
],
- "select date to show nearby orders": [
+ "There are pending KYC requirements.": [
""
],
- "order id": [
+ "Missing id": [
""
],
- "jump to order with the given order ID": [
+ "Not found": [
""
],
- "remove all filters": [
+ "Select date to show nearby orders": [
""
],
- "only show paid orders": [
+ "Only show paid orders": [
""
],
- "Paid": [
+ "New": [
""
],
- "only show orders with refunds": [
+ "Only show orders with refunds": [
""
],
- "Refunded": [
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
+ ""
+ ],
+ "Not wired": [
""
],
- "only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "Completed": [
""
],
- "Not wired": [
+ "Remove all filters": [
""
],
- "clear date filter": [
+ "Clear date filter": [
""
],
- "date (YYYY/MM/DD)": [
+ "Jump to date (%1$s)": [
""
],
- "Enter an order id": [
+ "Jump to order with the given product ID": [
""
],
- "order not found": [
+ "Order id": [
""
],
- "could not get the order to refund": [
+ "Invalid. Only characters and numbers": [
""
],
- "Loading...": [
+ "Just letters and numbers from 2 to 7": [
""
],
- "click here to configure the stock of the product, leave it as is and the backend will not control stock": [
+ "Size of the key must be 32": [
""
],
- "Manage stock": [
+ "Internal id on the system": [
""
],
- "this product has been configured without stock control": [
+ "Useful to identify the device physically": [
""
],
- "Infinite": [
+ "Verification algorithm": [
""
],
- "lost cannot be greater than current and incoming (max %1$s)": [
+ "Algorithm to use to verify transaction in offline mode": [
""
],
- "Incoming": [
+ "Device key": [
""
],
- "Lost": [
+ "Be sure to be very hard to guess or use the random generator": [
""
],
- "Current": [
+ "Your device need to have exactly the same value": [
""
],
- "remove stock control for this product": [
+ "Generate random secret key": [
""
],
- "without stock": [
+ "Random": [
""
],
- "Next restock": [
+ "You can scan the next QR code with your device or save the key before continuing.": [
""
],
- "Delivery address": [
+ "Device added successfully": [
""
],
- "product identification to use in URLs (for internal use only)": [
+ "Could not add device": [
""
],
- "illustration of the product for customers": [
+ "OTP Devices": [
""
],
- "product description for customers": [
+ "Add new devices": [
""
],
- "Age restricted": [
+ "Load more devices before the first one": [
""
],
- "is this product restricted for customer below certain age?": [
+ "Delete selected devices from the database": [
""
],
- "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [
+ "Load more devices after the last one": [
""
],
- "sale price for customers, including taxes, for above units of the product": [
+ "There is no devices yet, add more pressing the + sign": [
""
],
- "Stock": [
+ "Device delete successfully": [
""
],
- "product inventory for products with finite supply (for internal use only)": [
+ "Could not delete the device": [
""
],
- "taxes included in the product price, exposed to customers": [
+ "Device:": [
""
],
- "Need to complete marked fields": [
+ "Not modified": [
""
],
- "could not create product": [
+ "Change key": [
""
],
- "Products": [
+ "Could not update template": [
""
],
- "add product to inventory": [
+ "Template id is unknown": [
""
],
- "Sell": [
+ "The provided information is inconsistent with the current state of the template": [
""
],
- "Profit": [
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
""
],
- "Sold": [
+ "Manage stock": [
""
],
- "free": [
+ "This product has been configured without stock control": [
""
],
- "go to product update page": [
+ "Infinite": [
""
],
- "Update": [
+ "Lost can't be greater than current and incoming (max %1$s)": [
""
],
- "remove this product from the database": [
+ "Incoming": [
""
],
- "update the product with new price": [
+ "Lost": [
""
],
- "update product with new price": [
+ "Current": [
""
],
- "add more elements to the inventory": [
+ "Remove stock control for this product": [
""
],
- "report elements lost in the inventory": [
+ "without stock": [
""
],
- "new price for the product": [
+ "Next restock": [
""
],
- "the are value with errors": [
+ "Warehouse address": [
""
],
- "update product with new stock and price": [
+ "Add element to the list": [
""
],
- "There is no products yet, add more pressing the + sign": [
+ "Invalid amount": [
""
],
- "product updated successfully": [
+ "Product identification to use in URLs (for internal use only).": [
""
],
- "could not update the product": [
+ "Illustration of the product for customers.": [
""
],
- "product delete successfully": [
+ "Product description for customers.": [
""
],
- "could not delete the product": [
+ "Age restriction": [
""
],
- "Product id:": [
+ "Is this product restricted for customer below certain age?": [
""
],
- "To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.": [
+ "Minimum age of the customer": [
""
],
- "If your system supports RFC 8905, you can do this by opening this URI:": [
+ "Unit name": [
""
],
- "it should be greater than 0": [
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
""
],
- "must be a valid URL": [
+ "Example: kg, items or liters": [
""
],
- "Initial balance": [
+ "Price per unit": [
""
],
- "balance prior to deposit": [
+ "Sale price for customers, including taxes, for above units of the product.": [
""
],
- "Exchange URL": [
+ "Stock": [
""
],
- "URL of exchange": [
+ "Inventory for products with finite supply (for internal use only).": [
""
],
- "Next": [
+ "Taxes included in the product price, exposed to customers.": [
""
],
- "Wire method": [
+ "Categories": [
""
],
- "method to use for wire transfer": [
+ "Search by category description or id": [
""
],
- "Select one wire method": [
+ "Categories where this product will be listed on.": [
""
],
- "could not create reserve": [
+ "Product created successfully": [
""
],
- "Valid until": [
+ "Could not create product": [
""
],
- "Created balance": [
+ "Inventory": [
""
],
- "Exchange balance": [
+ "Add product to inventory": [
""
],
- "Picked up": [
+ "Sales": [
""
],
- "Committed": [
+ "Sold": [
""
],
- "Account address": [
+ "Free": [
""
],
- "Subject": [
+ "Go to product update page": [
""
],
- "Tips": [
+ "Update": [
""
],
- "No tips has been authorized from this reserve": [
+ "Remove this product from the database": [
""
],
- "Authorized": [
+ "Load more products after the last one": [
""
],
- "Expiration": [
+ "Update the product with new price": [
""
],
- "amount of tip": [
+ "Update product with new price": [
""
],
- "Justification": [
+ "Confirm update": [
+ "Confirmer"
+ ],
+ "Add more elements to the inventory": [
""
],
- "reason for the tip": [
+ "Report elements lost in the inventory": [
""
],
- "URL after tip": [
+ "New price for the product": [
""
],
- "URL to visit after tip payment": [
+ "The are value with errors": [
""
],
- "Reserves not yet funded": [
+ "Update product with new stock and price": [
""
],
- "Reserves ready": [
+ "There is no products yet, add more pressing the + sign": [
""
],
- "add new reserve": [
+ "Jump to product with the given product ID": [
""
],
- "Expires at": [
+ "Product id": [
""
],
- "Initial": [
+ "Product updated successfully": [
""
],
- "delete selected reserve from the database": [
+ "Could not update the product": [
""
],
- "authorize new tip from selected reserve": [
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "There is no ready reserves yet, add more pressing the + sign or fund them": [
+ "Could not delete the product": [
""
],
- "Expected Balance": [
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
""
],
- "could not create the tip": [
+ "Deleting an product can't be undone.": [
""
],
- "should not be empty": [
+ "Product id:": [
""
],
- "should be greater that 0": [
+ "Product (ID: %1$s) has been updated": [
""
],
- "can't be empty": [
+ "Could not update product": [
""
],
- "to short": [
+ "Invalid. only characters and numbers": [
""
],
- "just letters and numbers from 2 to 7": [
+ "Must be greater that 0": [
""
],
- "size of the key should be 32": [
+ "To short": [
""
],
"Identifier": [
@@ -5870,18 +10082,36 @@ strings['fr'] = {
"Describe what this template stands for": [
""
],
- "Fixed summary": [
+ "If specified, this template will create order with the same summary": [
""
],
- "If specified, this template will create order with the same summary": [
+ "Summary is editable": [
""
],
- "Fixed price": [
+ "Allow the user to change the summary.": [
""
],
"If specified, this template will create order with the same price": [
""
],
+ "Amount is editable": [
+ ""
+ ],
+ "Allow the user to select the amount to pay.": [
+ ""
+ ],
+ "Currency is editable": [
+ ""
+ ],
+ "Allow the user to change currency.": [
+ ""
+ ],
+ "Supported currencies": [
+ ""
+ ],
+ "Supported currencies: %1$s": [
+ ""
+ ],
"Minimum age": [
""
],
@@ -5894,187 +10124,223 @@ strings['fr'] = {
"How much time has the customer to complete the payment once the order was created.": [
""
],
- "Verification algorithm": [
+ "OTP device": [
""
],
- "Algorithm to use to verify transaction in offline mode": [
+ "Use to verify transaction while offline.": [
""
],
- "Point-of-sale key": [
+ "No OTP device.": [
""
],
- "Useful to validate the purchase": [
+ "Add one first": [
""
],
- "generate random secret key": [
+ "No device": [
""
],
- "random": [
+ "Use to verify transaction in offline mode.": [
""
],
- "show secret key": [
+ "Template has been created": [
""
],
- "hide secret key": [
+ "Could not create template": [
""
],
- "hide": [
+ "Templates": [
""
],
- "show": [
+ "Add new templates": [
""
],
- "could not inform template": [
+ "Load more templates before the first one": [
""
],
- "Amount is required": [
+ "Delete selected templates from the database": [
""
],
- "Order summary is required": [
+ "Use template to create new order": [
""
],
- "New order for template": [
+ "Use template": [
""
],
- "Amount of the order": [
+ "Create qr code for the template": [
""
],
- "Order summary": [
+ "Load more templates after the last one": [
+ ""
+ ],
+ "There is no templates yet, add more pressing the + sign": [
+ ""
+ ],
+ "Jump to template with the given template ID": [
""
],
- "could not create order from template": [
+ "Template identification": [
""
],
- "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "Fixed amount": [
+ "Failed to delete template": [
""
],
- "Default amount": [
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
""
],
- "Default summary": [
+ "Deleting an template": [
""
],
+ "can't be undone": [
+ "ne peux pas être vide"
+ ],
"Print": [
""
],
- "Setup TOTP": [
+ "Too short": [
""
],
- "Templates": [
+ "Template (ID: %1$s) has been updated": [
""
],
- "add new templates": [
+ "Amount is required": [
""
],
- "load more templates before the first one": [
+ "Order summary is required": [
""
],
- "load newer templates": [
+ "New order for template": [
""
],
- "delete selected templates from the database": [
+ "Amount of the order": [
""
],
- "use template to create new order": [
+ "Order summary": [
""
],
- "create qr code for the template": [
+ "Could not create order from template": [
""
],
- "load more templates after the last one": [
+ "You need your access token to perform the operation": [
""
],
- "load older templates": [
+ "You are updating the access token from instance with id \"%1$s\"": [
""
],
- "There is no templates yet, add more pressing the + sign": [
+ "This instance doesn't have authentication token.": [
""
],
- "template delete successfully": [
+ "You can leave it empty if there is another layer of security.": [
""
],
- "could not delete the template": [
+ "Current access token": [
""
],
- "could not update template": [
+ "Clearing the access token will mean public access to the instance.": [
""
],
- "should be one of '%1$s'": [
+ "Clear token": [
""
],
- "Webhook ID to use": [
+ "Confirm change": [
+ "Confirmer"
+ ],
+ "Failed to clear token": [
""
],
- "Event": [
+ "Failed to set new token": [
""
],
- "The event of the webhook: why the webhook is used": [
+ "Slug": [
""
],
- "Method": [
+ "Token family slug to use in URLs (for internal use only)": [
""
],
- "Method used by the webhook": [
+ "Kind": [
""
],
- "URL": [
+ "Token family kind": [
""
],
- "URL of the webhook where the customer will be redirected": [
+ "User-readable token family name": [
""
],
- "Header": [
+ "Token family description for customers": [
""
],
- "Header template of the webhook": [
+ "Valid After": [
""
],
- "Body": [
+ "Token family can issue tokens after this date": [
""
],
- "Body template by the webhook": [
+ "Valid Before": [
""
],
- "Webhooks": [
+ "Token family can issue tokens until this date": [
""
],
- "add new webhooks": [
+ "Duration": [
""
],
- "load more webhooks before the first one": [
+ "Validity duration of a issued token": [
""
],
- "load newer webhooks": [
+ "Token familty created successfully": [
""
],
- "Event type": [
+ "Could not create token family": [
""
],
- "delete selected webhook from the database": [
+ "Token Families": [
""
],
- "load more webhooks after the last one": [
+ "Add token family": [
""
],
- "load older webhooks": [
+ "Go to token family update page": [
""
],
- "There is no webhooks yet, add more pressing the + sign": [
+ "Remove this token family from the database": [
+ ""
+ ],
+ "There are no token families yet, add the first one by pressing the + sign.": [
+ ""
+ ],
+ "Token family updated successfully": [
+ ""
+ ],
+ "Could not update the token family": [
+ ""
+ ],
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
+ ""
+ ],
+ "Failed to delete token family": [
+ ""
+ ],
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
""
],
- "webhook delete successfully": [
+ "Deleting a token family %1$s .": [
""
],
- "could not delete the webhook": [
+ "Token Family: %1$s": [
""
],
- "check the id, does not look valid": [
+ "Token familty updated successfully": [
""
],
- "should have 52 characters, current %1$s": [
+ "Could not update token family": [
+ ""
+ ],
+ "Check the id, does not look valid": [
+ ""
+ ],
+ "Must have 52 characters, current %1$s": [
""
],
"URL doesn't have the right format": [
@@ -6092,7 +10358,10 @@ strings['fr'] = {
"Wire transfer ID": [
""
],
- "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ ""
+ ],
+ "Exchange URL": [
""
],
"Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
@@ -6104,19 +10373,19 @@ strings['fr'] = {
"Actual amount that was wired to the merchant's bank account": [
""
],
- "could not inform transfer": [
+ "Wire transfer informed successfully": [
""
],
- "Transfers": [
+ "Could not inform transfer": [
""
],
- "add new transfer": [
+ "Transfers": [
""
],
- "load more transfers before the first one": [
+ "Add new transfer": [
""
],
- "load newer transfers": [
+ "Load more transfers before the first one": [
""
],
"Credit": [
@@ -6137,292 +10406,379 @@ strings['fr'] = {
"no": [
""
],
- "unknown": [
+ "never": [
""
],
- "delete selected transfer from the database": [
+ "unknown": [
""
],
- "load more transfer after the last one": [
+ "Delete selected transfer from the database": [
""
],
- "load older transfers": [
+ "Load more transfers after the last one": [
""
],
"There is no transfer yet, add more pressing the + sign": [
""
],
- "filter by account address": [
+ "All accounts": [
+ ""
+ ],
+ "Filter by account address": [
""
],
- "only show wire transfers confirmed by the merchant": [
+ "Only show wire transfers confirmed by the merchant": [
""
],
- "only show wire transfers claimed by the exchange": [
+ "Only show wire transfers claimed by the exchange": [
""
],
"Unverified": [
""
],
- "is not valid": [
+ "Wire transfer \"%1$s...\" has been deleted": [
""
],
- "is not a number": [
+ "Failed to delete transfer": [
""
],
- "must be 1 or greater": [
+ "Must be business or individual": [
""
],
- "max 7 lines": [
+ "Pay delay can't be greater than wire transfer delay": [
""
],
- "change authorization configuration": [
+ "Max 7 lines": [
+ ""
+ ],
+ "Doesn't match": [
+ ""
+ ],
+ "Enable access control": [
+ ""
+ ],
+ "Choose if the backend server should authenticate access.": [
+ ""
+ ],
+ "Access control is not yet decided. This instance can't be created.": [
+ ""
+ ],
+ "Authorization must be handled externally.": [
+ ""
+ ],
+ "Authorization is handled by the backend server.": [
""
],
"Need to complete marked fields and choose authorization method": [
""
],
- "This is not a valid bitcoin address.": [
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
""
],
- "This is not a valid Ethereum address.": [
+ "Business name": [
""
],
- "IBAN numbers usually have more that 4 digits": [
+ "Legal name of the business represented by this instance.": [
""
],
- "IBAN numbers usually have less that 34 digits": [
+ "Email": [
""
],
- "IBAN country code not found": [
+ "Contact email": [
""
],
- "IBAN number is not valid, checksum is wrong": [
+ "Website URL": [
""
],
- "Target type": [
+ "URL.": [
""
],
- "Method to use for wire transfer": [
+ "Logo": [
""
],
- "Routing": [
+ "Logo image.": [
""
],
- "Routing number.": [
+ "Physical location of the merchant.": [
""
],
- "Account": [
+ "Jurisdiction": [
""
],
- "Account number.": [
+ "Jurisdiction for legal disputes with the merchant.": [
""
],
- "Business Identifier Code.": [
+ "Pay transaction fee": [
""
],
- "Bank Account Number.": [
+ "Assume the cost of the transaction of let the user pay for it.": [
""
],
- "Unified Payment Interface.": [
+ "Default payment delay": [
""
],
- "Bitcoin protocol.": [
+ "Time customers have to pay an order before the offer expires by default.": [
""
],
- "Ethereum protocol.": [
+ "Default wire transfer delay": [
""
],
- "Interledger protocol.": [
+ "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
""
],
- "Host": [
+ "Instance id": [
""
],
- "Bank host.": [
+ "Failed to update instance": [
""
],
- "Bank account.": [
+ "Must be \"pay\" or \"refund\"": [
""
],
- "Bank account owner's name.": [
+ "Must be one of '%1$s'": [
""
],
- "No accounts yet.": [
+ "Webhook ID to use": [
""
],
- "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Event": [
""
],
- "Business name": [
+ "Pay": [
""
],
- "Legal name of the business represented by this instance.": [
+ "The event of the webhook: why the webhook is used": [
""
],
- "Email": [
+ "Method": [
""
],
- "Contact email": [
+ "GET": [
""
],
- "Website URL": [
+ "POST": [
""
],
- "URL.": [
+ "PUT": [
""
],
- "Logo": [
+ "PATCH": [
""
],
- "Logo image.": [
+ "HEAD": [
""
],
- "Bank account": [
+ "Method used by the webhook": [
""
],
- "URI specifying bank account for crediting revenue.": [
+ "URL": [
""
],
- "Default max deposit fee": [
+ "URL of the webhook where the customer will be redirected": [
""
],
- "Maximum deposit fees this merchant is willing to pay per order by default.": [
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
""
],
- "Default max wire fee": [
+ "For example %1$s will be replaced with the the order's price": [
""
],
- "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [
+ "The short list of variables are:": [
""
],
- "Default wire fee amortization": [
+ "order's description": [
""
],
- "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [
+ "order's price": [
""
],
- "Physical location of the merchant.": [
+ "order's unique identification": [
""
],
- "Jurisdiction": [
+ "the amount that was being refunded": [
""
],
- "Jurisdiction for legal disputes with the merchant.": [
+ "the reason entered by the merchant staff for granting the refund": [
""
],
- "Default payment delay": [
+ "time of the refund in nanoseconds since 1970": [
""
],
- "Time customers have to pay an order before the offer expires by default.": [
+ "Http body": [
""
],
- "Default wire transfer delay": [
+ "Body template by the webhook": [
""
],
- "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
+ "Webhook create successfully": [
""
],
- "Instance id": [
+ "Could not create the webhook": [
""
],
- "Change the authorization method use for this instance.": [
+ "Could not create webhook": [
""
],
- "Manage access token": [
+ "Webhooks": [
""
],
- "Failed to create instance": [
+ "Add new webhooks": [
""
],
- "Login required": [
+ "Load more webhooks before the first one": [
""
],
- "Please enter your access token.": [
+ "Event type": [
""
],
- "Access Token": [
+ "Delete selected webhook from the database": [
""
],
- "The request to the backend take too long and was cancelled": [
+ "Load more webhooks after the last one": [
""
],
- "Diagnostic from %1$s is \"%2$s\"": [
+ "There is no webhooks yet, add more pressing the + sign": [
""
],
- "The backend reported a problem: HTTP status #%1$s": [
+ "Webhook delete successfully": [
""
],
- "Diagnostic from %1$s is '%2$s'": [
+ "Could not delete the webhook": [
""
],
- "Access denied": [
+ "Header": [
""
],
- "The access token provided is invalid.": [
+ "Header template of the webhook": [
""
],
- "No 'default' instance configured yet.": [
+ "Body": [
""
],
- "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Webhook updated": [
""
],
- "The access token provided is invalid": [
+ "Could not update webhook": [
""
],
- "Hide for today": [
+ "Language": [
""
],
- "Instance": [
+ "Advance order creation": [
""
],
- "Settings": [
+ "Shows more options in the order creation form": [
""
],
- "Connection": [
+ "Advance instance settings": [
""
],
- "New": [
+ "Shows more options in the instance settings form": [
""
],
- "List": [
+ "Date format": [
""
],
- "Log out": [
+ "How the date is going to be displayed": [
+ ""
+ ],
+ "Developer mode": [
+ ""
+ ],
+ "Shows more options and tools which are not intended for general audience.": [
+ ""
+ ],
+ "Total products": [
+ ""
+ ],
+ "Delete selected category from the database": [
+ ""
+ ],
+ "There is no categories yet, add more pressing the + sign": [
+ ""
+ ],
+ "Category delete successfully": [
+ ""
+ ],
+ "Could not delete the category": [
+ ""
+ ],
+ "Category name": [
+ ""
+ ],
+ "Category added successfully": [
+ ""
+ ],
+ "Could not add category": [
+ ""
+ ],
+ "Id:": [
+ ""
+ ],
+ "Name of the category": [
+ ""
+ ],
+ "Products": [
+ ""
+ ],
+ "Search by product description or id": [
+ ""
+ ],
+ "Products that this category will list.": [
+ ""
+ ],
+ "Could not update category": [
+ ""
+ ],
+ "Category id is unknown": [
""
],
- "Check your token is valid": [
+ "Without this the merchant backend will refuse to create new orders.": [
""
],
- "Couldn't access the server.": [
+ "Hide for today": [
+ ""
+ ],
+ "KYC verification needed": [
+ ""
+ ],
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
+ ""
+ ],
+ "Configuration": [
+ "Confirmer"
+ ],
+ "Settings": [
""
],
- "Could not infer instance id from url %1$s": [
+ "Access token": [
""
],
- "Server not found": [
+ "Connection": [
""
],
- "Server response with an error code": [
+ "Interface": [
""
],
- "Got message %1$s from %2$s": [
+ "List": [
+ ""
+ ],
+ "Log out": [
""
],
- "Response from server is unreadable, http status: %1$s": [
+ "Failed to create instance": [
""
],
- "Unexpected Error": [
+ "checking compatibility with server...": [
""
],
- "The value %1$s is invalid for a payment url": [
+ "Contacting the server failed": [
""
],
- "add element to the list": [
+ "The server version is not supported": [
""
],
- "add": [
+ "Supported version \"%1$s\", server version \"%2$s\".": [
""
],
"Deleting": [
@@ -6431,6 +10787,12 @@ strings['fr'] = {
"Changing": [
""
],
+ "Manage access token": [
+ ""
+ ],
+ "Business Name": [
+ ""
+ ],
"Order ID": [
""
],
@@ -6438,3218 +10800,6484 @@ strings['fr'] = {
""
]
}
- }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=(n!=1);",
+ "lang": "fr",
+ "completeness": 18
};
-strings['it'] = {
- "domain": "messages",
+strings['es'] = {
"locale_data": {
"messages": {
"": {
"domain": "messages",
- "plural_forms": "nplurals=2; plural=(n != 1);",
- "lang": ""
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "es"
},
+ "The request reached a timeout, check your connection.": [
+ "El pedido a terminado en tiempo agotado, verifique su conexión."
+ ],
+ "The request was cancelled.": [
+ "El pedido a sido cancelado."
+ ],
+ "A lot of request were made to the same server and this action was throttled.": [
+ "Se hicieron muchos pedidos al mismo servidor y esta acción a sido limitada."
+ ],
+ "The response of the request is malformed.": [
+ "La respuesta del pedido no esta bien formada."
+ ],
+ "Could not complete the request due to a network problem.": [
+ "No se pudo completar el pedido por problemas de red."
+ ],
+ "Unexpected request error.": [
+ "Error inesperado en el pedido."
+ ],
+ "Unexpected error.": [
+ "Error inesperado."
+ ],
"Cancel": [
- ""
+ "Cancelar"
],
"%1$s": [
- ""
+ "%1$s"
],
"Close": [
- ""
+ "Cerrar"
],
"Continue": [
- ""
+ "Continuar"
],
"Clear": [
- ""
+ "Limpiar"
],
"Confirm": [
+ "Confirmar"
+ ],
+ "Required": [
+ "Requerido"
+ ],
+ "Letter must be a JSON string": [
+ "Letter debe ser una cadena JSON"
+ ],
+ "JSON string is invalid": [
+ "La cadena JSON es invalida"
+ ],
+ "Import": [
+ "Importar"
+ ],
+ "Importing an account from the bank": [
+ "Importando una cuenta desde el banco"
+ ],
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
+ "Puedes exportar una configuracion de cuenta desde el perfil de cuenta del banco Libeufin. Pega el contenido en el próximo campo."
+ ],
+ "Account information": [
+ "Información de la cuenta"
+ ],
+ "Correct form": [
+ "Formulario correcto"
+ ],
+ "Comparing account details": [
+ "Comparando detalle de cuentas"
+ ],
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
+ "Verificando contra la URL de información de cuenta exitoso pero la información de la cuenta reportada es diferente a los detalles de cuenta en el formulario."
+ ],
+ "Field": [
+ "Campo"
+ ],
+ "In the form": [
+ "En el formulario"
+ ],
+ "Reported": [
+ "Reportado"
+ ],
+ "Type": [
+ "Tipo"
+ ],
+ "IBAN": [
+ "IBAN"
+ ],
+ "Address": [
+ "Dirección"
+ ],
+ "Host": [
+ "Host"
+ ],
+ "Account id": [
+ "Identificacion de cuenta"
+ ],
+ "Owner's name": [
+ "Nombre del dueno"
+ ],
+ "Account": [
+ "Cuenta"
+ ],
+ "Bank host": [
+ "Host del banco."
+ ],
+ "Bank account": [
+ "Cuenta bancaria"
+ ],
+ "BIC": [
""
],
- "is not the same as the current access token": [
+ "Ok": [
""
],
- "cannot be empty": [
+ "Validate bank account: %1$s": [
+ "Abono en cuenta bancaria"
+ ],
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
""
],
- "cannot be the same as the old token": [
+ "Step 1:": [
""
],
- "is not the same": [
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
""
],
- "You are updating the access token from instance with id %1$s": [
+ "Subject": [
+ "Asunto"
+ ],
+ "Step 2:": [
""
],
- "Old access token": [
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
""
],
- "access token currently in use": [
+ "Receiver name": [
+ "Fecha de entrega"
+ ],
+ "Step 3:": [
""
],
- "New access token": [
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
""
],
- "next access token to be used": [
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
""
],
- "Repeat access token": [
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
""
],
- "confirm the same access token": [
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
+ "Si eliminas la instancia con nombre %1$s (ID: %2$s), el comerciante no podrá procesar ordenes o rembolsos"
+ ],
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
+ "Esta accion elimina la clave privada de la instancia pero preserva toda la información transaccional. Podrás acceder a esa información después de borrar la instancia."
+ ],
+ "Deleting an instance %1$s .": [
""
],
- "Clearing the access token will mean public access to the instance": [
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
""
],
- "cannot be the same as the old access token": [
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
""
],
- "You are setting the access token for the new instance": [
+ "Purging an instance %1$s .": [
""
],
+ "Is not the same as the current access token": [
+ "no es el mismo que el token de acceso actual"
+ ],
+ "Can't be the same as the old token": [
+ "no puede ser igual al viejo token"
+ ],
+ "Is not the same": [
+ "no son iguales"
+ ],
+ "You are updating the access token from instance with id %1$s": [
+ "Está actualizando el token de acceso para la instancia con id %1$s"
+ ],
+ "Old access token": [
+ "Token de acceso viejo"
+ ],
+ "Access token currently in use": [
+ "acceder al token en uso actualmente"
+ ],
+ "New access token": [
+ "Nuevo token de acceso"
+ ],
+ "Next access token to be used": [
+ "siguiente token de acceso a usar"
+ ],
+ "Repeat access token": [
+ "Repetir token de acceso"
+ ],
+ "Confirm the same access token": [
+ "confirmar el mismo token de acceso"
+ ],
+ "Clearing the access token will mean public access to the instance": [
+ "Limpiar el token de acceso significa acceso público a la instancia"
+ ],
+ "Can't be the same as the old access token": [
+ "no puede ser igual al anterior token de acceso"
+ ],
+ "You are setting the access token for the new instance": [
+ "Está estableciendo el token de acceso para la nueva instancia"
+ ],
"With external authorization method no check will be done by the merchant backend": [
- ""
+ "Con el método de autorización externa no se hará ninguna revisión por el backend del comerciante"
],
"Set external authorization": [
- ""
+ "Establecer autorización externa"
],
"Set access token": [
- ""
+ "Establecer token de acceso"
],
"Operation in progress...": [
- ""
+ "Operación en progreso..."
],
"The operation will be automatically canceled after %1$s seconds": [
+ "La operación será automáticamente cancelada luego de %1$s segundos"
+ ],
+ "Your password is incorrect": [
""
],
+ "Your instance not found": [
+ "Orden no encontrada"
+ ],
+ "Login required": [
+ "Login necesario"
+ ],
+ "Please enter your access token for %1$s.": [
+ "Por favor, introduzca su clave de acceso por %1$s."
+ ],
+ "Access Token": [
+ "Token de acceso"
+ ],
"Instances": [
- ""
+ "Instancias"
],
"Delete": [
+ "Borrar"
+ ],
+ "Add new instance": [
+ "agregar nueva instancia"
+ ],
+ "ID": [
+ "ID"
+ ],
+ "Name": [
+ "Nombre"
+ ],
+ "Edit": [
+ "Editar"
+ ],
+ "Purge": [
+ "Purgar"
+ ],
+ "There is no instances yet, add more pressing the + sign": [
+ "Todavía no hay instancias, agregue más presionando el signo +"
+ ],
+ "Only show active instances": [
+ "Solo mostrar instancias activas"
+ ],
+ "Active": [
+ "Activo"
+ ],
+ "Only show deleted instances": [
+ "Mostrar solo instancias eliminadas"
+ ],
+ "Deleted": [
+ "Eliminado"
+ ],
+ "Show all instances": [
+ "Mostrar todas las instancias"
+ ],
+ "All": [
+ "Todo"
+ ],
+ "Instance \"%1$s\" (ID: %2$s) has been deleted": [
+ "La instancia '%1$s' (ID: %2$s) fue eliminada"
+ ],
+ "Failed to delete instance": [
+ "Fallo al eliminar instancia"
+ ],
+ "Instance '%1$s' (ID: %2$s) has been purge": [
+ "Instance '%1$s' (ID: %2$s) ha sido deshabilitada"
+ ],
+ "Failed to purge instance": [
+ "Fallo al purgar la instancia"
+ ],
+ "Loading...": [
+ "Cargando..."
+ ],
+ "This is not a valid bitcoin address.": [
+ "Esta no es una dirección de bitcoin válida."
+ ],
+ "This is not a valid Ethereum address.": [
+ "Esta no es una dirección de Ethereum válida."
+ ],
+ "This is not a valid host.": [
+ "Esta no es una dirección de bitcoin válida."
+ ],
+ "IBAN numbers usually have more that 4 digits": [
+ "Los números IBAN usualmente tienen mas de 4 digitos"
+ ],
+ "IBAN numbers usually have less that 34 digits": [
+ "Los números IBAN usualmente tienen menos de 34 digitos"
+ ],
+ "IBAN country code not found": [
+ "Código de pais de IBAN no encontrado"
+ ],
+ "IBAN number is invalid, checksum is wrong": [
+ "El número IBAN no es válido, falló la verificación"
+ ],
+ "Choose one...": [
+ "Elija uno..."
+ ],
+ "Method to use for wire transfer": [
+ "Método a usar para la transferencia"
+ ],
+ "Routing": [
+ "Enrutamiento"
+ ],
+ "Routing number.": [
+ "Número de enrutamiento."
+ ],
+ "Account number.": [
+ "Numero de cuenta"
+ ],
+ "Code": [
+ "Código"
+ ],
+ "Business Identifier Code.": [
+ "Código de identificación de la empresa."
+ ],
+ "International Bank Account Number.": [
+ "Número de cuenta bancaria."
+ ],
+ "Unified Payment Interface.": [
+ "Interfaz de pago unificado."
+ ],
+ "Bitcoin protocol.": [
+ "Protocolo Bitcoin."
+ ],
+ "Ethereum protocol.": [
+ "Protocolo Ethereum."
+ ],
+ "Interledger protocol.": [
+ "Protocolo Interledger."
+ ],
+ "Bank host.": [
+ "Host del banco."
+ ],
+ "Without scheme and may include subpath:": [
""
],
- "add new instance": [
+ "Bank account.": [
+ "Cuenta bancaria."
+ ],
+ "Legal name of the person holding the account.": [
+ "Nombre legal de la persona titular de la cuenta."
+ ],
+ "It should match the bank account name.": [
""
],
- "ID": [
+ "Invalid url": [
+ "formato inválido"
+ ],
+ "URL must end with a '/'": [
""
],
- "Name": [
+ "URL must not contain params": [
""
],
- "Edit": [
+ "URL must not hash param": [
""
],
- "Purge": [
+ "The request to check the revenue API failed.": [
""
],
- "There is no instances yet, add more pressing the + sign": [
+ "Server replied with \"bad request\".": [
+ "El servidor responde con un código de error."
+ ],
+ "Unauthorized, check credentials.": [
""
],
- "Only show active instances": [
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
""
],
- "Active": [
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
""
],
- "Only show deleted instances": [
+ "Account:": [
+ "Cuenta"
+ ],
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
""
],
- "Deleted": [
+ "Endpoint URL": [
""
],
- "Show all instances": [
+ "From where the merchant can download information about incoming wire transfers to this account": [
""
],
- "All": [
+ "Auth type": [
+ "Tipo de evento"
+ ],
+ "Choose the authentication type for the account info URL": [
""
],
- "Instance \"%1$s\" (ID: %2$s) has been deleted": [
+ "Without authentication": [
""
],
- "Failed to delete instance": [
+ "With password": [
""
],
- "Instance '%1$s' (ID: %2$s) has been disabled": [
+ "With token": [
+ "Crear token"
+ ],
+ "Do not change": [
+ "URL del proveedor"
+ ],
+ "Username": [
""
],
- "Failed to purge instance": [
+ "Username to access the account information.": [
""
],
- "Pending KYC verification": [
+ "Password": [
""
],
- "Timed out": [
+ "Password to access the account information.": [
""
],
- "Exchange": [
+ "Token": [
""
],
- "Target account": [
+ "Access token to access the account information.": [
""
],
- "KYC URL": [
+ "Match": [
""
],
- "Code": [
+ "Check where the information match against the server info.": [
""
],
- "Http Status": [
+ "Not verified": [
+ "Sin verificar"
+ ],
+ "Last test was ok": [
""
],
- "No pending kyc verification!": [
+ "Last test failed": [
""
],
- "change value to unknown date": [
+ "Compare info from server with account form": [
""
],
- "change value to empty": [
+ "Test": [
""
],
- "clear": [
+ "Need to complete marked fields": [
+ "Necesita completar los campos marcados"
+ ],
+ "Confirm operation": [
+ "Confirmado"
+ ],
+ "Account details": [
+ "Dirección de cuenta"
+ ],
+ "Import from bank": [
""
],
- "change value to never": [
+ "Could not create account": [
+ "no se pudo crear el producto"
+ ],
+ "No 'default' instance configured yet.": [
+ "No se ha configurado una instancia por 'defecto' todavía."
+ ],
+ "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Cree una instancia \"por defecto\" para empezar a utilizar el backoffice comerciante."
+ ],
+ "Bank accounts": [
+ "Cuenta bancaria"
+ ],
+ "Add new account": [
+ "Abono en cuenta bancaria"
+ ],
+ "Wire method: Bitcoin": [
+ "Método de transferencia"
+ ],
+ "Sewgit 1": [
""
],
- "never": [
+ "Sewgit 2": [
""
],
- "Country": [
+ "Delete selected accounts from the database": [
+ "eliminar transferencia seleccionada de la base de datos"
+ ],
+ "Wire method: x-taler-bank": [
+ "Método de transferencia"
+ ],
+ "Account name": [
+ "Dirección de la cuenta"
+ ],
+ "Wire method: IBAN": [
+ "Método de transferencia"
+ ],
+ "Other accounts": [
+ "Cuenta objetivo"
+ ],
+ "Path": [
""
],
- "Address": [
+ "There is no accounts yet, add more pressing the + sign": [
+ "No existen productos todavía, añadir más pulsando el símbolo +"
+ ],
+ "You need to associate a bank account to receive revenue.": [
+ "URI que especifica la cuenta bancaria para acreditar los ingresos."
+ ],
+ "Without this the you won't be able to create new orders.": [
+ "Sin esto, no podrá crear nuevos pedidos."
+ ],
+ "Bank account delete successfully": [
+ "Eliminación de cuenta bancaria con éxito"
+ ],
+ "Could not delete the bank account": [
+ "No se pudo eliminar la cuenta bancaria"
+ ],
+ "Could not update account": [
+ "No se ha podido actualizar la cuenta"
+ ],
+ "Could not delete account": [
+ "No se pudo eliminar la cuenta"
+ ],
+ "Pending KYC verification": [
+ "Verificación KYC pendiente"
+ ],
+ "Exchange": [
+ "Exchange"
+ ],
+ "Reason": [
+ "Razón"
+ ],
+ "Pending KYC process, click here to complete": [
""
],
- "Building number": [
+ "The exchange require a account verification.": [
""
],
+ "Http Status": [
+ "Estado http"
+ ],
+ "No pending kyc verification!": [
+ "¡No hay verificación kyc pendiente!"
+ ],
+ "Change value to unknown date": [
+ "cambiar valor a fecha desconocida"
+ ],
+ "Change value to empty": [
+ "cambiar valor a vacío"
+ ],
+ "Change value to never": [
+ "cambiar valor a nunca"
+ ],
+ "Never": [
+ "nunca"
+ ],
+ "days": [
+ "días"
+ ],
+ "hours": [
+ "horas"
+ ],
+ "minutes": [
+ "minutos"
+ ],
+ "seconds": [
+ "segundos"
+ ],
+ "Forever": [
+ "por siempre"
+ ],
+ "%1$sM": [
+ "%1$sM"
+ ],
+ "%1$sY": [
+ "%1$sA"
+ ],
+ "%1$sd": [
+ "%1$sd"
+ ],
+ "%1$sh": [
+ "%1$sh"
+ ],
+ "%1$smin": [
+ "%1$smin"
+ ],
+ "%1$ssec": [
+ "%1$sseg"
+ ],
+ "Country": [
+ "País"
+ ],
+ "Building number": [
+ "Número de edificio"
+ ],
"Building name": [
- ""
+ "Nombre de edificio"
],
"Street": [
- ""
+ "Calle"
],
"Post code": [
- ""
+ "Código postal"
],
"Town location": [
- ""
+ "Ubicación de ciudad"
],
"Town": [
- ""
+ "Ciudad"
],
"District": [
- ""
+ "Distrito"
],
"Country subdivision": [
+ "Subdivisión de país"
+ ],
+ "Description": [
+ "Descripción"
+ ],
+ "Enter description or id": [
+ "Insertar un ID para el pedido"
+ ],
+ "no match found with that description or id": [
+ "no se encontraron productos con esa descripción"
+ ],
+ "You must enter a valid product identifier.": [
+ "Debe ingresar un identificador de producto válido."
+ ],
+ "Quantity must be greater than 0!": [
+ "¡Cantidad debe ser mayor que 0!"
+ ],
+ "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
+ "Esta cantidad excede las existencias restantes. Actualmente, solo quedan %1$s unidades sin reservar en las existencias."
+ ],
+ "Search product": [
+ "Productos de inventario"
+ ],
+ "Quantity": [
+ "Cantidad"
+ ],
+ "How many products will be added": [
+ "cuántos productos serán agregados"
+ ],
+ "Add from inventory": [
+ "Agregar del inventario"
+ ],
+ "Image must be smaller than 1 MB": [
+ "La imagen debe ser mas chica que 1 MB"
+ ],
+ "Add": [
+ "Agregar"
+ ],
+ "Remove": [
+ "Eliminar"
+ ],
+ "Invalid": [
+ "no válido"
+ ],
+ "This product has %1$s applicable taxes configured.": [
""
],
- "Product id": [
+ "No taxes configured for this product.": [
+ "Ningun impuesto configurado para este producto."
+ ],
+ "Amount": [
+ "Monto"
+ ],
+ "Taxes can be in currencies that differ from the main currency used by the merchant.": [
+ "Impuestos pueden estar en divisas que difieren de la principal divisa usada por el comerciante."
+ ],
+ "Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.": [
+ "Ingrese divisa y valor separado por dos puntos, e.g. &quot;USD:2.3&quot;."
+ ],
+ "Legal name of the tax, e.g. VAT or import duties.": [
+ "Nombre legal del impuesto, e.g. IVA o arancel."
+ ],
+ "Add tax to the tax list": [
+ "agregar impuesto a la lista de impuestos"
+ ],
+ "Describe and add a product that is not in the inventory list": [
+ "describa y agregue un producto que no está en la lista de inventarios"
+ ],
+ "Add custom product": [
+ "Agregue un producto personalizado"
+ ],
+ "Complete information of the product": [
+ "Complete información del producto"
+ ],
+ "Must be a number": [
+ "no es un número"
+ ],
+ "Must be grater than 0": [
+ "debe ser mayor que 0"
+ ],
+ "Image": [
+ "Imagen"
+ ],
+ "Photo of the product.": [
+ "foto del producto."
+ ],
+ "Full product description.": [
+ "descripción completa del producto"
+ ],
+ "Unit": [
+ "Unidad"
+ ],
+ "Name of the product unit.": [
+ "nombre de la unidad del producto."
+ ],
+ "Price": [
+ "Precio"
+ ],
+ "Amount in the current currency.": [
+ "Monto de la divisa actual."
+ ],
+ "How many products will be added.": [
+ "Cuántos productos serán agregados."
+ ],
+ "Taxes": [
+ "Impuestos"
+ ],
+ "Unit price": [
+ "precio unitario"
+ ],
+ "Total price": [
+ "Precio total"
+ ],
+ "Must be greater than 0": [
+ "debe ser mayor que 0"
+ ],
+ "Refund deadline can't be before pay deadline": [
+ "plazo de reembolso no puede ser antes que el plazo de pago"
+ ],
+ "Wire transfer deadline can't be before refund deadline": [
+ "el plazo de la transferencia bancaria no puede ser antes que el plazo de reembolso"
+ ],
+ "Wire transfer deadline can't be before pay deadline": [
+ "el plazo de la transferencia bancaria no puede ser antes que el plazo de pago"
+ ],
+ "Must have a refund deadline": [
+ "debería tener un plazo de reembolso"
+ ],
+ "Auto refund can't be after refund deadline": [
+ "reembolso automático no puede ser después qu el plazo de reembolso"
+ ],
+ "Must be in the future": [
+ "deberían ser en el futuro"
+ ],
+ "Simple": [
""
],
- "Description": [
+ "Advanced": [
""
],
- "Product": [
+ "Manage products in order": [
+ "Manejar productos en orden"
+ ],
+ "%1$s products with a total price of %2$s.": [
+ "%1$s productos con un precio total de %2$s."
+ ],
+ "Manage list of products in the order.": [
+ "Manejar lista de productos en la orden."
+ ],
+ "Remove this product from the order.": [
+ "Remover este producto de la orden."
+ ],
+ "Total product price added up": [
+ "precio total de producto agregado"
+ ],
+ "Amount to be paid by the customer": [
+ "Monto a ser pagado por el cliente"
+ ],
+ "Order price": [
+ "Precio de la orden"
+ ],
+ "Final order price": [
+ "Precio final de la orden"
+ ],
+ "Summary": [
+ "Resumen"
+ ],
+ "Title of the order to be shown to the customer": [
+ "Título de la orden a ser mostrado al cliente"
+ ],
+ "Shipping and Fulfillment": [
+ "Envío y cumplimiento"
+ ],
+ "Delivery date": [
+ "Fecha de entrega"
+ ],
+ "Deadline for physical delivery assured by the merchant.": [
+ "Plazo para la entrega física asegurado por el comerciante."
+ ],
+ "Location": [
+ "Ubicación"
+ ],
+ "Address where the products will be delivered": [
+ "dirección a donde los productos serán entregados"
+ ],
+ "Fulfillment URL": [
+ "URL de cumplimiento"
+ ],
+ "URL to which the user will be redirected after successful payment.": [
+ "URL al cual el usuario será redirigido luego de pago exitoso."
+ ],
+ "Taler payment options": [
+ "Opciones de pago de Taler"
+ ],
+ "Override default Taler payment settings for this order": [
+ "Sobrescribir pagos por omisión de Taler para esta orden"
+ ],
+ "Payment time": [
+ "Opciones de pago"
+ ],
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
+ "Plazo límite para que el cliente pague por la oferta antes de que expire. Productos del inventario serán reservados hasta este plazo límite."
+ ],
+ "Default": [
+ "Importe por defecto"
+ ],
+ "Refund time": [
+ "Reembolsado"
+ ],
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
+ "Tiempo hasta el cual la orden puede ser reembolsada por el comerciante."
+ ],
+ "Wire transfer time": [
+ "ID de la transferencia"
+ ],
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
+ "Plazo para que el proveedor haga la transferencia bancaria."
+ ],
+ "Auto-refund time": [
+ "Plazo de reembolso automático"
+ ],
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "Tiempo hasta el cual la cartera será automáticamente revisada por reembolsos sin interacción por parte del usuario."
+ ],
+ "Maximum fee": [
+ "Máxima tarifa de transferencia"
+ ],
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "Máxima tarifa de depósito que el comerciante esta dispuesto a cubir para esta orden. Mayores tarifas de depósito deben ser cubiertas completamente por el consumidor."
+ ],
+ "Create token": [
+ "Crear token"
+ ],
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
""
],
- "search products by it's description or id": [
+ "Minimum age required": [
+ "Edad mínima requerida"
+ ],
+ "Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products": [
+ "Cualquier valor superior a 0 limitará las monedas que se pueden utilizar para pagar este contrato. Si está vacío, la restricción de edad vendrá definida por los productos"
+ ],
+ "Min age defined by the producs is %1$s": [
+ "La edad mínima definida por el producto es%1$s"
+ ],
+ "No product with age restriction in this order": [
""
],
- "no products found with that description": [
+ "Additional information": [
+ "Información adicional"
+ ],
+ "Custom information to be included in the contract for this order.": [
+ "Información personalizada que debe incluirse en el contrato para este pedido."
+ ],
+ "You must enter a value in JavaScript Object Notation (JSON).": [
+ "Debes introducir un valor en JavaScript Object Notation (JSON)."
+ ],
+ "Custom field name": [
+ "Nombre de edificio"
+ ],
+ "Disabled": [
""
],
- "You must enter a valid product identifier.": [
+ "No deadline": [
+ "Plazo de reembolso"
+ ],
+ "Deadline at %1$s": [
""
],
- "Quantity must be greater than 0!": [
+ "Could not create order": [
+ "no se pudo crear la reserva"
+ ],
+ "No exchange would accept a payment because of KYC requirements.": [
""
],
- "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
+ "No more stock for product with id \"%1$s\".": [
""
],
- "Quantity": [
+ "Orders": [
+ "Órdenes"
+ ],
+ "Create order": [
+ "crear orden"
+ ],
+ "Load first page": [
""
],
- "how many products will be added": [
+ "Date": [
+ "Fecha"
+ ],
+ "Refund": [
+ "Devolución"
+ ],
+ "copy url": [
+ "copiar url"
+ ],
+ "Load more orders after the last one": [
+ "cargue más transferencia luego de la última"
+ ],
+ "Load next page": [
""
],
- "Add from inventory": [
+ "No orders have been found matching your query!": [
+ "¡No se encontraron órdenes que emparejen su búsqueda!"
+ ],
+ "Duplicated": [
+ "duplicado"
+ ],
+ "This value exceed the refundable amount": [
+ "este monto excede el monto reembolsable"
+ ],
+ "Amount to be refunded": [
+ "monto a ser reembolsado"
+ ],
+ "Max refundable:": [
+ "Máximo reembolzable:"
+ ],
+ "Requested by the customer": [
+ "pedido por el consumidor"
+ ],
+ "Other": [
+ "otro"
+ ],
+ "Why this order is being refunded": [
+ "por qué esta orden está siendo reembolsada"
+ ],
+ "More information to give context": [
+ "más información para dar contexto"
+ ],
+ "Contract Terms": [
+ "Términos de contrato"
+ ],
+ "Human-readable description of the whole purchase": [
+ "descripción legible de toda la compra"
+ ],
+ "Total price for the transaction": [
+ "precio total de la transacción"
+ ],
+ "URL for this purchase": [
+ "URL para esta compra"
+ ],
+ "Max fee": [
+ "Máxima comisión"
+ ],
+ "Maximum total deposit fee accepted by the merchant for this contract": [
+ "tasa máxima total de depósito aceptada por el comerciante para este contrato"
+ ],
+ "Created at": [
+ "Creado en"
+ ],
+ "Time when this contract was generated": [
+ "momento en que se generó este contrato"
+ ],
+ "Refund deadline": [
+ "Plazo de reembolso"
+ ],
+ "After this deadline has passed no refunds will be accepted": [
+ "pasado este plazo no se aceptarán devoluciones"
+ ],
+ "Payment deadline": [
+ "Plazo de pago"
+ ],
+ "After this deadline, the merchant won't accept payments for the contract": [
+ "pasado este plazo, el comerciante no aceptará pagos por el contrato"
+ ],
+ "Wire transfer deadline": [
+ "Plazo de la transferencia bancaria"
+ ],
+ "Transfer deadline for the exchange": [
+ "plazo de transferencia para el proveedor"
+ ],
+ "Time indicating when the order should be delivered": [
+ "fecha en la que debe entregarse el pedido"
+ ],
+ "Where the order will be delivered": [
+ "dónde se entregará el pedido"
+ ],
+ "Auto-refund delay": [
+ "Plazo de reembolso automático"
+ ],
+ "How long the wallet should try to get an automatic refund for the purchase": [
+ "cuánto tiempo debe intentar la cartera obtener el reembolso automático de la compra"
+ ],
+ "Extra info": [
+ "Información adicional"
+ ],
+ "Extra data that is only interpreted by the merchant frontend": [
+ "datos adicionales que solo son interpretados por la interfaz del comerciante"
+ ],
+ "Order": [
+ "Orden"
+ ],
+ "Claimed": [
+ "reclamado"
+ ],
+ "Claimed at": [
+ "reclamado en"
+ ],
+ "Timeline": [
+ "Cronología"
+ ],
+ "Payment details": [
+ "Detalles de pago"
+ ],
+ "Order status": [
+ "Estado de orden"
+ ],
+ "Product list": [
+ "Lista de producto"
+ ],
+ "Paid": [
+ "Pagado"
+ ],
+ "Wired": [
+ "transferido"
+ ],
+ "Refunded": [
+ "Reembolsado"
+ ],
+ "Refund order": [
+ "reembolsado"
+ ],
+ "Not refundable": [
+ "No reembolsable"
+ ],
+ "Next event in": [
""
],
- "Image should be smaller than 1 MB": [
+ "Refunded amount": [
+ "Monto reembolsado"
+ ],
+ "Refund taken": [
+ "Reembolsado"
+ ],
+ "Status URL": [
+ "Estado de la URL"
+ ],
+ "Refund URI": [
+ "URI de devolución"
+ ],
+ "Unpaid": [
+ "impago"
+ ],
+ "Pay at": [
+ "pagar en"
+ ],
+ "Order status URL": [
+ "URL de estado de orden"
+ ],
+ "Payment URI": [
+ "URI de pago"
+ ],
+ "Unknown order status. This is an error, please contact the administrator.": [
+ "Estado de orden desconocido. Esto es un error, por favor contacte a su administrador."
+ ],
+ "Back": [
+ "Regresar"
+ ],
+ "Refund created successfully": [
+ "reembolzo creado satisfactoriamente"
+ ],
+ "Could not create the refund": [
+ "No se pudo create el reembolso"
+ ],
+ "There are pending KYC requirements.": [
""
],
- "Add": [
+ "Missing id": [
""
],
- "Remove": [
+ "Not found": [
+ "Orden no encontrada"
+ ],
+ "Select date to show nearby orders": [
+ "seleccione la fecha para mostrar pedidos cercanos"
+ ],
+ "Only show paid orders": [
+ "mostrar sólo pedidos pagados"
+ ],
+ "New": [
+ "Nuevo"
+ ],
+ "Only show orders with refunds": [
+ "mostrar solo pedidos con reembolso"
+ ],
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "mostrar sólo los pedidos en los que los clientes han pagado, pero los pagos por transferencia del proveedor de pago siguen pendientes"
+ ],
+ "Not wired": [
+ "No transferido"
+ ],
+ "Completed": [
+ "Eliminado"
+ ],
+ "Remove all filters": [
+ "eliminar todos los filtros"
+ ],
+ "Clear date filter": [
+ "borrar filtro de fechas"
+ ],
+ "Jump to date (%1$s)": [
""
],
- "No taxes configured for this product.": [
+ "Jump to order with the given product ID": [
+ "saltar al pedido con el ID de pedido proporcionado"
+ ],
+ "Order id": [
+ "ID de la orden"
+ ],
+ "Invalid. Only characters and numbers": [
""
],
- "Amount": [
+ "Just letters and numbers from 2 to 7": [
+ "sólo letras y números del 2 al 7"
+ ],
+ "Size of the key must be 32": [
+ "el tamaño de la clave debe ser 32"
+ ],
+ "Internal id on the system": [
""
],
- "Taxes can be in currencies that differ from the main currency used by the merchant.": [
+ "Useful to identify the device physically": [
""
],
- "Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.": [
+ "Verification algorithm": [
+ "Algoritmo de verificación"
+ ],
+ "Algorithm to use to verify transaction in offline mode": [
+ "Algoritmo a utilizar para verificar la transacción en modo offline"
+ ],
+ "Device key": [
""
],
- "Legal name of the tax, e.g. VAT or import duties.": [
+ "Be sure to be very hard to guess or use the random generator": [
""
],
- "add tax to the tax list": [
+ "Your device need to have exactly the same value": [
""
],
- "describe and add a product that is not in the inventory list": [
+ "Generate random secret key": [
+ "generar clave secreta aleatoria"
+ ],
+ "Random": [
+ "aleatorio"
+ ],
+ "You can scan the next QR code with your device or save the key before continuing.": [
""
],
- "Add custom product": [
+ "Device added successfully": [
+ "reembolzo creado satisfactoriamente"
+ ],
+ "Could not add device": [
+ "no se pudo crear la reserva"
+ ],
+ "OTP Devices": [
""
],
- "Complete information of the product": [
+ "Add new devices": [
+ "cargar nuevas transferencias"
+ ],
+ "Load more devices before the first one": [
+ "cargar más plantillas antes de la primera"
+ ],
+ "Delete selected devices from the database": [
+ "eliminar la reserva seleccionada de la base de datos"
+ ],
+ "Load more devices after the last one": [
+ "cargar más plantillas después de la última"
+ ],
+ "There is no devices yet, add more pressing the + sign": [
+ "Todavía no hay instancias, agregue más presionando el signo +"
+ ],
+ "Device delete successfully": [
+ "producto fue eliminado correctamente"
+ ],
+ "Could not delete the device": [
+ "no se pudo eliminar el producto"
+ ],
+ "Device:": [
""
],
- "Image": [
+ "Not modified": [
+ "No transferido"
+ ],
+ "Change key": [
""
],
- "photo of the product": [
+ "Could not update template": [
+ "no se pudo actualizar el producto"
+ ],
+ "Template id is unknown": [
""
],
- "full product description": [
+ "The provided information is inconsistent with the current state of the template": [
""
],
- "Unit": [
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
+ "Pulse aquí para configurar el stock del producto, déjelo como está y el backend no controlará el stock."
+ ],
+ "Manage stock": [
+ "Administrar stock"
+ ],
+ "This product has been configured without stock control": [
+ "este producto se ha configurado sin control de existencias"
+ ],
+ "Infinite": [
+ "Inifinito"
+ ],
+ "Lost can't be greater than current and incoming (max %1$s)": [
+ "la pérdida no puede ser mayor que la cantidad entrante actual (max %1$s )"
+ ],
+ "Incoming": [
+ "Ingresando"
+ ],
+ "Lost": [
+ "Perdido"
+ ],
+ "Current": [
+ "Actual"
+ ],
+ "Remove stock control for this product": [
+ "eliminar el control de existencias de este producto"
+ ],
+ "without stock": [
+ "sin stock"
+ ],
+ "Next restock": [
+ "Próximo reabastecimiento"
+ ],
+ "Warehouse address": [
+ "Dirección de cuenta"
+ ],
+ "Add element to the list": [
+ "agregar elemento a la lista"
+ ],
+ "Invalid amount": [
+ "Importe fijo"
+ ],
+ "Product identification to use in URLs (for internal use only).": [
+ "Identificación del producto para usar en las URL (solo para uso interno)."
+ ],
+ "Illustration of the product for customers.": [
+ "ilustración del producto para los clientes."
+ ],
+ "Product description for customers.": [
+ "Descripción del producto para los clientes."
+ ],
+ "Age restriction": [
+ "Restricción de edad"
+ ],
+ "Is this product restricted for customer below certain age?": [
+ "¿este producto está restringido para clientes menores de cierta edad?"
+ ],
+ "Minimum age of the customer": [
+ "Edad mínima requerida"
+ ],
+ "Unit name": [
+ "Unidad"
+ ],
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
+ "Unidad que describe la cantidad de producto vendido (por ejemplo, 2 kilogramos, 5 litros, 3 artículos, 5 metros) para los clientes."
+ ],
+ "Example: kg, items or liters": [
""
],
- "name of the product unit": [
+ "Price per unit": [
""
],
- "Price": [
+ "Sale price for customers, including taxes, for above units of the product.": [
+ "Precio de venta para los clientes, impuestos incluidos, por encima de las unidades del producto."
+ ],
+ "Stock": [
+ "Existencias"
+ ],
+ "Inventory for products with finite supply (for internal use only).": [
+ "Inventario de productos para productos con suministro finito (sólo para uso interno)."
+ ],
+ "Taxes included in the product price, exposed to customers.": [
+ "Impuestos incluidos en el precio del producto, expuestos a los clientes."
+ ],
+ "Categories": [
""
],
- "amount in the current currency": [
+ "Search by category description or id": [
+ "buscar productos por su descripción o ID"
+ ],
+ "Categories where this product will be listed on.": [
+ "Dirección a donde los productos serán entregados."
+ ],
+ "Product created successfully": [
+ "Producto creado con éxito"
+ ],
+ "Could not create product": [
+ "No se pudo crear el producto"
+ ],
+ "Inventory": [
+ "Inventario"
+ ],
+ "Add product to inventory": [
+ "Añadir producto al inventario"
+ ],
+ "Sales": [
+ "Ventas"
+ ],
+ "Sold": [
+ "Vendido"
+ ],
+ "Free": [
""
],
- "Taxes": [
+ "Go to product update page": [
+ "ir a la página de actualización del producto"
+ ],
+ "Update": [
+ "Actualizar"
+ ],
+ "Remove this product from the database": [
+ "eliminar este producto de la base de datos"
+ ],
+ "Load more products after the last one": [
+ "cargar más plantillas después de la última"
+ ],
+ "Update the product with new price": [
+ "actualizar el producto con el nuevo precio"
+ ],
+ "Update product with new price": [
+ "actualizar producto con nuevo precio"
+ ],
+ "Confirm update": [
+ "Confirmado"
+ ],
+ "Add more elements to the inventory": [
+ "añadir más elementos al inventario"
+ ],
+ "Report elements lost in the inventory": [
+ "informar de elementos perdidos en el inventario"
+ ],
+ "New price for the product": [
+ "nuevo precio para el producto"
+ ],
+ "The are value with errors": [
+ "hay valores con errores"
+ ],
+ "Update product with new stock and price": [
+ "actualizar el producto con nuevas existencias y precio"
+ ],
+ "There is no products yet, add more pressing the + sign": [
+ "No existen productos todavía, añadir más pulsando el símbolo +"
+ ],
+ "Jump to product with the given product ID": [
+ "saltar al pedido con el ID de pedido proporcionado"
+ ],
+ "Product id": [
+ "Id de producto"
+ ],
+ "Product updated successfully": [
+ "producto actualizado correctamente"
+ ],
+ "Could not update the product": [
+ "no se pudo actualizar el producto"
+ ],
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
+ "La instancia '%1$s' (ID: %2$s) fue eliminada"
+ ],
+ "Could not delete the product": [
+ "no se pudo eliminar el producto"
+ ],
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
""
],
- "image": [
+ "Deleting an product can't be undone.": [
""
],
- "description": [
+ "Product id:": [
+ "ID de producto:"
+ ],
+ "Product (ID: %1$s) has been updated": [
+ "El producto (ID: %1$s) se ha actualizado"
+ ],
+ "Could not update product": [
+ "No se pudo actualizar el producto"
+ ],
+ "Invalid. only characters and numbers": [
""
],
- "quantity": [
+ "Must be greater that 0": [
+ "debe ser mayor que 0"
+ ],
+ "To short": [
+ "demasiado corta"
+ ],
+ "Identifier": [
+ "Identificador"
+ ],
+ "Name of the template in URLs.": [
+ "Nombre de la plantilla en las URL."
+ ],
+ "Describe what this template stands for": [
+ "Describa lo que representa esta plantilla"
+ ],
+ "If specified, this template will create order with the same summary": [
+ "Si se especifica, esta plantilla creará pedidos con el mismo resumen"
+ ],
+ "Summary is editable": [
""
],
- "unit price": [
+ "Allow the user to change the summary.": [
""
],
- "total price": [
+ "If specified, this template will create order with the same price": [
+ "Si se especifica, esta plantilla creará pedidos con el mismo precio"
+ ],
+ "Amount is editable": [
+ "Monto abonado"
+ ],
+ "Allow the user to select the amount to pay.": [
""
],
- "required": [
+ "Currency is editable": [
""
],
- "not valid": [
+ "Allow the user to change currency.": [
""
],
- "must be greater than 0": [
+ "Supported currencies": [
""
],
- "not a valid json": [
+ "Supported currencies: %1$s": [
""
],
- "should be in the future": [
+ "Minimum age": [
+ "Edad mínima"
+ ],
+ "Is this contract restricted to some age?": [
+ "¿Este contrato está restringido a alguna edad?"
+ ],
+ "Payment timeout": [
+ "Opciones de pago"
+ ],
+ "How much time has the customer to complete the payment once the order was created.": [
+ "Cuánto tiempo tiene el cliente para completar el pago una vez creado el pedido."
+ ],
+ "OTP device": [
""
],
- "refund deadline cannot be before pay deadline": [
+ "Use to verify transaction while offline.": [
+ "Algoritmo a utilizar para verificar la transacción en modo offline."
+ ],
+ "No OTP device.": [
+ "Sin dispositivo OTP."
+ ],
+ "Add one first": [
""
],
- "wire transfer deadline cannot be before refund deadline": [
+ "No device": [
""
],
- "wire transfer deadline cannot be before pay deadline": [
+ "Use to verify transaction in offline mode.": [
+ "Algoritmo a utilizar para verificar la transacción en modo offline."
+ ],
+ "Template has been created": [
""
],
- "should have a refund deadline": [
+ "Could not create template": [
+ "no se pudo actualizar el producto"
+ ],
+ "Templates": [
+ "Plantillas"
+ ],
+ "Add new templates": [
+ "añadir nuevas plantillas"
+ ],
+ "Load more templates before the first one": [
+ "cargar más plantillas antes de la primera"
+ ],
+ "Delete selected templates from the database": [
+ "eliminar las plantillas seleccionadas de la base de datos"
+ ],
+ "Use template to create new order": [
+ "utilizar la plantilla para crear un nuevo pedido"
+ ],
+ "Use template": [
+ "añadir nuevas plantillas"
+ ],
+ "Create qr code for the template": [
+ "No se pudo create el reembolso"
+ ],
+ "Load more templates after the last one": [
+ "cargar más plantillas después de la última"
+ ],
+ "There is no templates yet, add more pressing the + sign": [
+ "No hay propinas todavía, agregar mas presionando el signo +"
+ ],
+ "Jump to template with the given template ID": [
+ "saltar al pedido con el ID de pedido proporcionado"
+ ],
+ "Template identification": [
""
],
- "auto refund cannot be after refund deadline": [
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
+ "La instancia '%1$s' (ID: %2$s) fue eliminada"
+ ],
+ "Failed to delete template": [
+ "Fallo al eliminar instancia"
+ ],
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
""
],
- "Manage products in order": [
+ "Deleting an template": [
+ "cargar nuevas transferencias"
+ ],
+ "can't be undone": [
+ "no puede ser vacío"
+ ],
+ "Print": [
+ "Imprimir"
+ ],
+ "Too short": [
+ "demasiado corta"
+ ],
+ "Template (ID: %1$s) has been updated": [
+ "Se ha actualizado la plantilla (ID: %1$s)"
+ ],
+ "Amount is required": [
+ "Se requiere una cantidad"
+ ],
+ "Order summary is required": [
+ "Se requiere resumen del pedido"
+ ],
+ "New order for template": [
+ "cargar viejas transferencias"
+ ],
+ "Amount of the order": [
+ "Importe del pedido"
+ ],
+ "Order summary": [
+ "Estado de orden"
+ ],
+ "Could not create order from template": [
+ "No se pudo create el reembolso"
+ ],
+ "You need your access token to perform the operation": [
+ "Está estableciendo el token de acceso para la nueva instancia"
+ ],
+ "You are updating the access token from instance with id \"%1$s\"": [
+ "Está actualizando el token de acceso para la instancia con id %1$s"
+ ],
+ "This instance doesn't have authentication token.": [
""
],
- "Manage list of products in the order.": [
+ "You can leave it empty if there is another layer of security.": [
""
],
- "Remove this product from the order.": [
+ "Current access token": [
+ "Establecer token de acceso"
+ ],
+ "Clearing the access token will mean public access to the instance.": [
+ "Limpiar el token de acceso significa acceso público a la instancia."
+ ],
+ "Clear token": [
+ "Borrar token"
+ ],
+ "Confirm change": [
+ "Confirmar modificación"
+ ],
+ "Failed to clear token": [
+ "Fallo al borrar el token"
+ ],
+ "Failed to set new token": [
+ "No se ha podido establecer el nuevo token"
+ ],
+ "Slug": [
""
],
- "Total price": [
+ "Token family slug to use in URLs (for internal use only)": [
+ "Identificación del producto para usar en las URL (solo para uso interno)"
+ ],
+ "Kind": [
""
],
- "total product price added up": [
+ "Token family kind": [
""
],
- "Amount to be paid by the customer": [
+ "User-readable token family name": [
""
],
- "Order price": [
+ "Token family description for customers": [
+ "descripción del producto para los clientes"
+ ],
+ "Valid After": [
+ "Válido hasta"
+ ],
+ "Token family can issue tokens after this date": [
""
],
- "final order price": [
+ "Valid Before": [
+ "formato inválido"
+ ],
+ "Token family can issue tokens until this date": [
""
],
- "Summary": [
+ "Duration": [
+ "Expiración"
+ ],
+ "Validity duration of a issued token": [
""
],
- "Title of the order to be shown to the customer": [
+ "Token familty created successfully": [
+ "reembolzo creado satisfactoriamente"
+ ],
+ "Could not create token family": [
+ "No se pudo create el reembolso"
+ ],
+ "Token Families": [
""
],
- "Shipping and Fulfillment": [
+ "Add token family": [
""
],
- "Delivery date": [
+ "Go to token family update page": [
+ "ir a la página de actualización del producto"
+ ],
+ "Remove this token family from the database": [
+ "eliminar este producto de la base de datos"
+ ],
+ "There are no token families yet, add the first one by pressing the + sign.": [
+ "No hay propinas todavía, agregar mas presionando el signo +."
+ ],
+ "Token family updated successfully": [
+ "Familia de tokens actualizada correctamente"
+ ],
+ "Could not update the token family": [
+ "No se ha podido actualizar la familia de tokens"
+ ],
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
+ "Se ha eliminado la familia de tokens \"%1$s\" (SLUG: %2$s)"
+ ],
+ "Failed to delete token family": [
+ "No se ha podido eliminar la familia de tokens"
+ ],
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
+ "Si elimina la familia de tokens %1$s (Slug: %2$s), todos los tokens emitidos no serán válidos."
+ ],
+ "Deleting a token family %1$s .": [
+ "Eliminando una familia de tokens %1$s ."
+ ],
+ "Token Family: %1$s": [
+ "Familia de tokens: %1$s"
+ ],
+ "Token familty updated successfully": [
+ "Familia de tokens actualizada con éxito"
+ ],
+ "Could not update token family": [
+ "No se ha podido actualizar la familia de tokens"
+ ],
+ "Check the id, does not look valid": [
+ "comprueba el ID, parece no ser válido"
+ ],
+ "Must have 52 characters, current %1$s": [
+ "debería tener 52 caracteres, actualmente %1$s"
+ ],
+ "URL doesn't have the right format": [
+ "La URL no tiene el formato correcto"
+ ],
+ "Credited bank account": [
+ "Abono en cuenta bancaria"
+ ],
+ "Select one account": [
+ "Selecciona una cuenta"
+ ],
+ "Bank account of the merchant where the payment was received": [
+ "Cuenta bancaria del comerciante donde se recibió el pago"
+ ],
+ "Wire transfer ID": [
+ "ID de la transferencia"
+ ],
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "identificador único de la transferencia utilizado por el proveedor, debe tener 52 caracteres"
+ ],
+ "Exchange URL": [
+ "URL del proveedor"
+ ],
+ "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
+ "URL base del proveedor que realizó la transferencia, debería haber estado en el asunto de la transferencia bancaria"
+ ],
+ "Amount credited": [
+ "Monto abonado"
+ ],
+ "Actual amount that was wired to the merchant's bank account": [
+ "Monto real que se transfirió a la cuenta bancaria del comerciante"
+ ],
+ "Wire transfer informed successfully": [
+ "reembolzo creado satisfactoriamente"
+ ],
+ "Could not inform transfer": [
+ "no se pudo informar la transferencia"
+ ],
+ "Transfers": [
+ "Transferencias"
+ ],
+ "Add new transfer": [
+ "añadir nueva transferencia"
+ ],
+ "Load more transfers before the first one": [
+ "cargar más transferencias antes de la primera"
+ ],
+ "Credit": [
+ "Crédito"
+ ],
+ "Confirmed": [
+ "Confirmado"
+ ],
+ "Verified": [
+ "Verificado"
+ ],
+ "Executed at": [
+ "Ejecutado en"
+ ],
+ "yes": [
+ "si"
+ ],
+ "no": [
+ "no"
+ ],
+ "never": [
+ "nunca"
+ ],
+ "unknown": [
+ "desconocido"
+ ],
+ "Delete selected transfer from the database": [
+ "eliminar transferencia seleccionada de la base de datos"
+ ],
+ "Load more transfers after the last one": [
+ "cargue más transferencia luego de la última"
+ ],
+ "There is no transfer yet, add more pressing the + sign": [
+ "No hay transferencias todavía, agregar mas presionando el signo +"
+ ],
+ "All accounts": [
+ "Cuenta"
+ ],
+ "Filter by account address": [
+ "filtrar por dirección de cuenta"
+ ],
+ "Only show wire transfers confirmed by the merchant": [
+ "mostrar sólo las transferencias confirmadas por el comerciante"
+ ],
+ "Only show wire transfers claimed by the exchange": [
+ "sólo muestran las transferencias reclamadas por el proveedor"
+ ],
+ "Unverified": [
+ "Sin verificar"
+ ],
+ "Wire transfer \"%1$s...\" has been deleted": [
+ "Se ha eliminado la transferencia bancaria \"%1$s...\""
+ ],
+ "Failed to delete transfer": [
+ "Error al eliminar la transferencia"
+ ],
+ "Must be business or individual": [
""
],
- "Deadline for physical delivery assured by the merchant.": [
+ "Pay delay can't be greater than wire transfer delay": [
""
],
- "Location": [
+ "Max 7 lines": [
+ "máximo 7 líneas"
+ ],
+ "Doesn't match": [
""
],
- "address where the products will be delivered": [
+ "Enable access control": [
+ "Administrar token de acceso"
+ ],
+ "Choose if the backend server should authenticate access.": [
""
],
- "Fulfillment URL": [
+ "Access control is not yet decided. This instance can't be created.": [
""
],
- "URL to which the user will be redirected after successful payment.": [
+ "Authorization must be handled externally.": [
""
],
- "Taler payment options": [
+ "Authorization is handled by the backend server.": [
""
],
- "Override default Taler payment settings for this order": [
+ "Need to complete marked fields and choose authorization method": [
+ "Necesita completar campos marcados y escoger un método de autorización"
+ ],
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Nombre de la instancia en URL. La instancia \"por defecto\" es especial, ya que se utiliza para administrar otras instancias."
+ ],
+ "Business name": [
+ "Nombre del negocio"
+ ],
+ "Legal name of the business represented by this instance.": [
+ "Nombre legal de la empresa representada por esta instancia."
+ ],
+ "Email": [
+ "Correo eletrónico"
+ ],
+ "Contact email": [
+ "Correo electrónico del contacto"
+ ],
+ "Website URL": [
+ "URL de sitio web"
+ ],
+ "URL.": [
+ "URL."
+ ],
+ "Logo": [
+ "Logotipo"
+ ],
+ "Logo image.": [
+ "Imagen del logotipo."
+ ],
+ "Physical location of the merchant.": [
+ "Ubicación física del comerciante."
+ ],
+ "Jurisdiction": [
+ "Jurisdicción"
+ ],
+ "Jurisdiction for legal disputes with the merchant.": [
+ "Jurisdicción para disputas legales con el comerciante."
+ ],
+ "Pay transaction fee": [
""
],
- "Payment deadline": [
+ "Assume the cost of the transaction of let the user pay for it.": [
""
],
- "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [
+ "Default payment delay": [
+ "Retraso del pago por defecto"
+ ],
+ "Time customers have to pay an order before the offer expires by default.": [
+ "Tiempo que los clientes tienen para pagar un pedido antes de que caduque la oferta de forma predeterminada."
+ ],
+ "Default wire transfer delay": [
+ "Retrazo de transferencia por omisión"
+ ],
+ "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
+ "Tiempo máximo que un proveedor puede retrasar la transferencia de fondos al comerciante, lo que le permite agrupar pagos más pequeños en transferencias más grandes y reducir las comisiones por transferencia."
+ ],
+ "Instance id": [
+ "ID de instancia"
+ ],
+ "Failed to update instance": [
+ "Fallo al crear la instancia"
+ ],
+ "Must be \"pay\" or \"refund\"": [
""
],
- "Refund deadline": [
+ "Must be one of '%1$s'": [
+ "deberían ser iguales"
+ ],
+ "Webhook ID to use": [
+ "ID de webhook a utilizar"
+ ],
+ "Event": [
+ "Evento"
+ ],
+ "Pay": [
""
],
- "Time until which the order can be refunded by the merchant.": [
+ "The event of the webhook: why the webhook is used": [
+ "El evento del webhook: por qué se utiliza el webhook"
+ ],
+ "Method": [
+ "Método"
+ ],
+ "GET": [
""
],
- "Wire transfer deadline": [
+ "POST": [
""
],
- "Deadline for the exchange to make the wire transfer.": [
+ "PUT": [
""
],
- "Auto-refund deadline": [
+ "PATCH": [
""
],
- "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "HEAD": [
""
],
- "Maximum deposit fee": [
+ "Method used by the webhook": [
+ "Método utilizado por el webhook"
+ ],
+ "URL": [
+ "URL"
+ ],
+ "URL of the webhook where the customer will be redirected": [
+ "URL del webhook al que se redirigirá al cliente"
+ ],
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
""
],
- "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "For example %1$s will be replaced with the the order's price": [
""
],
- "Maximum wire fee": [
+ "The short list of variables are:": [
""
],
- "Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.": [
+ "order's description": [
+ "descripción"
+ ],
+ "order's price": [
+ "Precio de la orden"
+ ],
+ "order's unique identification": [
""
],
- "Wire fee amortization": [
+ "the amount that was being refunded": [
+ "monto a ser reembolsado"
+ ],
+ "the reason entered by the merchant staff for granting the refund": [
""
],
- "Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.": [
+ "time of the refund in nanoseconds since 1970": [
""
],
- "Create token": [
+ "Http body": [
""
],
- "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [
+ "Body template by the webhook": [
+ "Plantilla del cuerpo del webhook"
+ ],
+ "Webhook create successfully": [
+ "el webhook ha sido borrado correctamente"
+ ],
+ "Could not create the webhook": [
+ "no se ha podido eliminar el webhook"
+ ],
+ "Could not create webhook": [
+ "no se ha podido eliminar el webhook"
+ ],
+ "Webhooks": [
+ "Webhooks"
+ ],
+ "Add new webhooks": [
+ "añadir nuevos webhooks"
+ ],
+ "Load more webhooks before the first one": [
+ "cargar más webhooks antes del primero"
+ ],
+ "Event type": [
+ "Tipo de evento"
+ ],
+ "Delete selected webhook from the database": [
+ "eliminar el webhook seleccionado de la base de datos"
+ ],
+ "Load more webhooks after the last one": [
+ "cargar más webhooks después del último"
+ ],
+ "There is no webhooks yet, add more pressing the + sign": [
+ "No hay webhooks todavía, añade más pulsando sobre el símbolo +"
+ ],
+ "Webhook delete successfully": [
+ "el webhook ha sido borrado correctamente"
+ ],
+ "Could not delete the webhook": [
+ "no se ha podido eliminar el webhook"
+ ],
+ "Header": [
+ "Cabecera"
+ ],
+ "Header template of the webhook": [
+ "Plantilla de cabecera del webhook"
+ ],
+ "Body": [
+ "Cuerpo"
+ ],
+ "Webhook updated": [
+ "ID de webhook a utilizar"
+ ],
+ "Could not update webhook": [
+ "no se ha podido eliminar el webhook"
+ ],
+ "Language": [
""
],
- "Minimum age required": [
+ "Advance order creation": [
""
],
- "Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products": [
+ "Shows more options in the order creation form": [
""
],
- "Min age defined by the producs is %1$s": [
+ "Advance instance settings": [
""
],
- "Additional information": [
+ "Shows more options in the instance settings form": [
""
],
- "Custom information to be included in the contract for this order.": [
+ "Date format": [
+ "formato inválido"
+ ],
+ "How the date is going to be displayed": [
""
],
- "You must enter a value in JavaScript Object Notation (JSON).": [
+ "Developer mode": [
""
],
- "days": [
+ "Shows more options and tools which are not intended for general audience.": [
""
],
- "hours": [
+ "Total products": [
+ "Precio total"
+ ],
+ "Delete selected category from the database": [
+ "eliminar transferencia seleccionada de la base de datos"
+ ],
+ "There is no categories yet, add more pressing the + sign": [
+ "No hay propinas todavía, agregar mas presionando el signo +"
+ ],
+ "Category delete successfully": [
+ "producto fue eliminado correctamente"
+ ],
+ "Could not delete the category": [
+ "no se pudo eliminar el producto"
+ ],
+ "Category name": [
""
],
- "minutes": [
+ "Category added successfully": [
+ "producto fue eliminado correctamente"
+ ],
+ "Could not add category": [
+ "no se pudo crear el producto"
+ ],
+ "Id:": [
""
],
- "seconds": [
+ "Name of the category": [
+ "El nombre de la categoría"
+ ],
+ "Products": [
+ "Productos"
+ ],
+ "Search by product description or id": [
+ "buscar productos por su descripción o ID"
+ ],
+ "Products that this category will list.": [
""
],
- "forever": [
+ "Could not update category": [
+ "no se pudo actualizar el producto"
+ ],
+ "Category id is unknown": [
""
],
- "%1$sM": [
+ "Without this the merchant backend will refuse to create new orders.": [
""
],
- "%1$sY": [
+ "Hide for today": [
+ "Ocultar por hoy"
+ ],
+ "KYC verification needed": [
+ "Verificación KYC pendiente"
+ ],
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
""
],
- "%1$sd": [
+ "Configuration": [
+ "Expiración"
+ ],
+ "Settings": [
+ "Configuración"
+ ],
+ "Access token": [
+ "Token de acceso"
+ ],
+ "Connection": [
+ "Conexión"
+ ],
+ "Interface": [
""
],
- "%1$sh": [
+ "List": [
+ "Lista"
+ ],
+ "Log out": [
+ "Salir"
+ ],
+ "Failed to create instance": [
+ "Fallo al crear la instancia"
+ ],
+ "checking compatibility with server...": [
""
],
- "%1$smin": [
+ "Contacting the server failed": [
+ "No se pudo aceder al servidor"
+ ],
+ "The server version is not supported": [
""
],
- "%1$ssec": [
+ "Supported version \"%1$s\", server version \"%2$s\".": [
""
],
- "Orders": [
+ "Deleting": [
+ "Borrando"
+ ],
+ "Changing": [
+ "Cambiando"
+ ],
+ "Manage access token": [
+ "Administrar token de acceso"
+ ],
+ "Business Name": [
+ "Nombre del negocio"
+ ],
+ "Order ID": [
+ "ID de pedido"
+ ],
+ "Payment URL": [
+ "URL de pago"
+ ]
+ }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "es",
+ "completeness": 79
+};
+
+strings['en'] = {
+ "locale_data": {
+ "messages": {
+ "": {
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=(n != 1);",
+ "lang": ""
+ },
+ "The request reached a timeout, check your connection.": [
""
],
- "create order": [
+ "The request was cancelled.": [
""
],
- "load newer orders": [
+ "A lot of request were made to the same server and this action was throttled.": [
""
],
- "Date": [
+ "The response of the request is malformed.": [
""
],
- "Refund": [
+ "Could not complete the request due to a network problem.": [
""
],
- "copy url": [
+ "Unexpected request error.": [
""
],
- "load older orders": [
+ "Unexpected error.": [
""
],
- "No orders have been found matching your query!": [
+ "Cancel": [
""
],
- "duplicated": [
+ "%1$s": [
""
],
- "invalid format": [
+ "Close": [
""
],
- "this value exceed the refundable amount": [
+ "Continue": [
""
],
- "date": [
+ "Clear": [
""
],
- "amount": [
+ "Confirm": [
""
],
- "reason": [
+ "Required": [
""
],
- "amount to be refunded": [
+ "Letter must be a JSON string": [
""
],
- "Max refundable:": [
+ "JSON string is invalid": [
""
],
- "Reason": [
+ "Import": [
""
],
- "Choose one...": [
+ "Importing an account from the bank": [
""
],
- "requested by the customer": [
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
""
],
- "other": [
+ "Account information": [
""
],
- "why this order is being refunded": [
+ "Correct form": [
""
],
- "more information to give context": [
+ "Comparing account details": [
""
],
- "Contract Terms": [
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
""
],
- "human-readable description of the whole purchase": [
+ "Field": [
""
],
- "total price for the transaction": [
+ "In the form": [
""
],
- "URL for this purchase": [
+ "Reported": [
""
],
- "Max fee": [
+ "Type": [
""
],
- "maximum total deposit fee accepted by the merchant for this contract": [
+ "IBAN": [
""
],
- "Max wire fee": [
+ "Address": [
""
],
- "maximum wire fee accepted by the merchant": [
+ "Host": [
""
],
- "over how many customer transactions does the merchant expect to amortize wire fees on average": [
+ "Account id": [
""
],
- "Created at": [
+ "Owner's name": [
""
],
- "time when this contract was generated": [
+ "Account": [
""
],
- "after this deadline has passed no refunds will be accepted": [
+ "Bank host": [
""
],
- "after this deadline, the merchant won't accept payments for the contract": [
+ "Bank account": [
""
],
- "transfer deadline for the exchange": [
+ "BIC": [
""
],
- "time indicating when the order should be delivered": [
+ "Ok": [
""
],
- "where the order will be delivered": [
+ "Validate bank account: %1$s": [
""
],
- "Auto-refund delay": [
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
""
],
- "how long the wallet should try to get an automatic refund for the purchase": [
+ "Step 1:": [
""
],
- "Extra info": [
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
""
],
- "extra data that is only interpreted by the merchant frontend": [
+ "Subject": [
""
],
- "Order": [
+ "Step 2:": [
""
],
- "claimed": [
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
""
],
- "claimed at": [
+ "Receiver name": [
""
],
- "Timeline": [
+ "Step 3:": [
""
],
- "Payment details": [
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
""
],
- "Order status": [
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
""
],
- "Product list": [
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
""
],
- "paid": [
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
""
],
- "wired": [
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
""
],
- "refunded": [
+ "Deleting an instance %1$s .": [
""
],
- "refund order": [
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
""
],
- "not refundable": [
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
""
],
- "refund": [
+ "Purging an instance %1$s .": [
""
],
- "Refunded amount": [
+ "Is not the same as the current access token": [
""
],
- "Refund taken": [
+ "Can't be the same as the old token": [
""
],
- "Status URL": [
+ "Is not the same": [
""
],
- "Refund URI": [
+ "You are updating the access token from instance with id %1$s": [
""
],
- "unpaid": [
+ "Old access token": [
""
],
- "pay at": [
+ "Access token currently in use": [
""
],
- "created at": [
+ "New access token": [
""
],
- "Order status URL": [
+ "Next access token to be used": [
""
],
- "Payment URI": [
+ "Repeat access token": [
""
],
- "Unknown order status. This is an error, please contact the administrator.": [
+ "Confirm the same access token": [
""
],
- "Back": [
+ "Clearing the access token will mean public access to the instance": [
+ ""
+ ],
+ "Can't be the same as the old access token": [
""
],
- "refund created successfully": [
+ "You are setting the access token for the new instance": [
""
],
- "could not create the refund": [
+ "With external authorization method no check will be done by the merchant backend": [
""
],
- "select date to show nearby orders": [
+ "Set external authorization": [
""
],
- "order id": [
+ "Set access token": [
""
],
- "jump to order with the given order ID": [
+ "Operation in progress...": [
""
],
- "remove all filters": [
+ "The operation will be automatically canceled after %1$s seconds": [
""
],
- "only show paid orders": [
+ "Your password is incorrect": [
""
],
- "Paid": [
+ "Your instance not found": [
""
],
- "only show orders with refunds": [
+ "Login required": [
""
],
- "Refunded": [
+ "Please enter your access token for %1$s.": [
""
],
- "only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "Access Token": [
""
],
- "Not wired": [
+ "Instances": [
+ ""
+ ],
+ "Delete": [
+ ""
+ ],
+ "Add new instance": [
+ ""
+ ],
+ "ID": [
+ ""
+ ],
+ "Name": [
+ ""
+ ],
+ "Edit": [
+ ""
+ ],
+ "Purge": [
+ ""
+ ],
+ "There is no instances yet, add more pressing the + sign": [
+ ""
+ ],
+ "Only show active instances": [
+ ""
+ ],
+ "Active": [
+ ""
+ ],
+ "Only show deleted instances": [
+ ""
+ ],
+ "Deleted": [
""
],
- "clear date filter": [
+ "Show all instances": [
""
],
- "date (YYYY/MM/DD)": [
+ "All": [
+ ""
+ ],
+ "Instance \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "Enter an order id": [
+ "Failed to delete instance": [
""
],
- "order not found": [
+ "Instance '%1$s' (ID: %2$s) has been purge": [
""
],
- "could not get the order to refund": [
+ "Failed to purge instance": [
""
],
"Loading...": [
""
],
- "click here to configure the stock of the product, leave it as is and the backend will not control stock": [
+ "This is not a valid bitcoin address.": [
""
],
- "Manage stock": [
+ "This is not a valid Ethereum address.": [
""
],
- "this product has been configured without stock control": [
+ "This is not a valid host.": [
""
],
- "Infinite": [
+ "IBAN numbers usually have more that 4 digits": [
""
],
- "lost cannot be greater than current and incoming (max %1$s)": [
+ "IBAN numbers usually have less that 34 digits": [
""
],
- "Incoming": [
+ "IBAN country code not found": [
""
],
- "Lost": [
+ "IBAN number is invalid, checksum is wrong": [
""
],
- "Current": [
+ "Choose one...": [
""
],
- "remove stock control for this product": [
+ "Method to use for wire transfer": [
""
],
- "without stock": [
+ "Routing": [
""
],
- "Next restock": [
+ "Routing number.": [
""
],
- "Delivery address": [
+ "Account number.": [
""
],
- "product identification to use in URLs (for internal use only)": [
+ "Code": [
""
],
- "illustration of the product for customers": [
+ "Business Identifier Code.": [
""
],
- "product description for customers": [
+ "International Bank Account Number.": [
""
],
- "Age restricted": [
+ "Unified Payment Interface.": [
""
],
- "is this product restricted for customer below certain age?": [
+ "Bitcoin protocol.": [
""
],
- "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [
+ "Ethereum protocol.": [
""
],
- "sale price for customers, including taxes, for above units of the product": [
+ "Interledger protocol.": [
""
],
- "Stock": [
+ "Bank host.": [
""
],
- "product inventory for products with finite supply (for internal use only)": [
+ "Without scheme and may include subpath:": [
""
],
- "taxes included in the product price, exposed to customers": [
+ "Bank account.": [
""
],
- "Need to complete marked fields": [
+ "Legal name of the person holding the account.": [
""
],
- "could not create product": [
+ "It should match the bank account name.": [
""
],
- "Products": [
+ "Invalid url": [
""
],
- "add product to inventory": [
+ "URL must end with a '/'": [
""
],
- "Sell": [
+ "URL must not contain params": [
""
],
- "Profit": [
+ "URL must not hash param": [
""
],
- "Sold": [
+ "The request to check the revenue API failed.": [
""
],
- "free": [
+ "Server replied with \"bad request\".": [
""
],
- "go to product update page": [
+ "Unauthorized, check credentials.": [
""
],
- "Update": [
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
""
],
- "remove this product from the database": [
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
""
],
- "update the product with new price": [
+ "Account:": [
""
],
- "update product with new price": [
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
""
],
- "add more elements to the inventory": [
+ "Endpoint URL": [
""
],
- "report elements lost in the inventory": [
+ "From where the merchant can download information about incoming wire transfers to this account": [
""
],
- "new price for the product": [
+ "Auth type": [
""
],
- "the are value with errors": [
+ "Choose the authentication type for the account info URL": [
""
],
- "update product with new stock and price": [
+ "Without authentication": [
""
],
- "There is no products yet, add more pressing the + sign": [
+ "With password": [
""
],
- "product updated successfully": [
+ "With token": [
""
],
- "could not update the product": [
+ "Do not change": [
""
],
- "product delete successfully": [
+ "Username": [
""
],
- "could not delete the product": [
+ "Username to access the account information.": [
""
],
- "Product id:": [
+ "Password": [
""
],
- "To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.": [
+ "Password to access the account information.": [
""
],
- "If your system supports RFC 8905, you can do this by opening this URI:": [
+ "Token": [
""
],
- "it should be greater than 0": [
+ "Access token to access the account information.": [
""
],
- "must be a valid URL": [
+ "Match": [
""
],
- "Initial balance": [
+ "Check where the information match against the server info.": [
""
],
- "balance prior to deposit": [
+ "Not verified": [
""
],
- "Exchange URL": [
+ "Last test was ok": [
""
],
- "URL of exchange": [
+ "Last test failed": [
""
],
- "Next": [
+ "Compare info from server with account form": [
""
],
- "Wire method": [
+ "Test": [
""
],
- "method to use for wire transfer": [
+ "Need to complete marked fields": [
""
],
- "Select one wire method": [
+ "Confirm operation": [
""
],
- "could not create reserve": [
+ "Account details": [
""
],
- "Valid until": [
+ "Import from bank": [
""
],
- "Created balance": [
+ "Could not create account": [
""
],
- "Exchange balance": [
+ "No 'default' instance configured yet.": [
""
],
- "Picked up": [
+ "Create a 'default' instance to begin using the merchant backoffice.": [
""
],
- "Committed": [
+ "Bank accounts": [
""
],
- "Account address": [
+ "Add new account": [
""
],
- "Subject": [
+ "Wire method: Bitcoin": [
""
],
- "Tips": [
+ "Sewgit 1": [
""
],
- "No tips has been authorized from this reserve": [
+ "Sewgit 2": [
""
],
- "Authorized": [
+ "Delete selected accounts from the database": [
""
],
- "Expiration": [
+ "Wire method: x-taler-bank": [
""
],
- "amount of tip": [
+ "Account name": [
""
],
- "Justification": [
+ "Wire method: IBAN": [
""
],
- "reason for the tip": [
+ "Other accounts": [
""
],
- "URL after tip": [
+ "Path": [
""
],
- "URL to visit after tip payment": [
+ "There is no accounts yet, add more pressing the + sign": [
""
],
- "Reserves not yet funded": [
+ "You need to associate a bank account to receive revenue.": [
""
],
- "Reserves ready": [
+ "Without this the you won't be able to create new orders.": [
""
],
- "add new reserve": [
+ "Bank account delete successfully": [
""
],
- "Expires at": [
+ "Could not delete the bank account": [
""
],
- "Initial": [
+ "Could not update account": [
""
],
- "delete selected reserve from the database": [
+ "Could not delete account": [
""
],
- "authorize new tip from selected reserve": [
+ "Pending KYC verification": [
""
],
- "There is no ready reserves yet, add more pressing the + sign or fund them": [
+ "Exchange": [
""
],
- "Expected Balance": [
+ "Reason": [
""
],
- "could not create the tip": [
+ "Pending KYC process, click here to complete": [
""
],
- "should not be empty": [
+ "The exchange require a account verification.": [
""
],
- "should be greater that 0": [
+ "Http Status": [
""
],
- "can't be empty": [
+ "No pending kyc verification!": [
""
],
- "to short": [
+ "Change value to unknown date": [
""
],
- "just letters and numbers from 2 to 7": [
+ "Change value to empty": [
""
],
- "size of the key should be 32": [
+ "Change value to never": [
""
],
- "Identifier": [
+ "Never": [
""
],
- "Name of the template in URLs.": [
+ "days": [
""
],
- "Describe what this template stands for": [
+ "hours": [
""
],
- "Fixed summary": [
+ "minutes": [
""
],
- "If specified, this template will create order with the same summary": [
+ "seconds": [
""
],
- "Fixed price": [
+ "Forever": [
""
],
- "If specified, this template will create order with the same price": [
+ "%1$sM": [
""
],
- "Minimum age": [
+ "%1$sY": [
""
],
- "Is this contract restricted to some age?": [
+ "%1$sd": [
""
],
- "Payment timeout": [
+ "%1$sh": [
""
],
- "How much time has the customer to complete the payment once the order was created.": [
+ "%1$smin": [
""
],
- "Verification algorithm": [
+ "%1$ssec": [
""
],
- "Algorithm to use to verify transaction in offline mode": [
+ "Country": [
""
],
- "Point-of-sale key": [
+ "Building number": [
""
],
- "Useful to validate the purchase": [
+ "Building name": [
""
],
- "generate random secret key": [
+ "Street": [
""
],
- "random": [
+ "Post code": [
""
],
- "show secret key": [
+ "Town location": [
""
],
- "hide secret key": [
+ "Town": [
""
],
- "hide": [
+ "District": [
""
],
- "show": [
+ "Country subdivision": [
""
],
- "could not inform template": [
+ "Description": [
""
],
- "Amount is required": [
+ "Enter description or id": [
""
],
- "Order summary is required": [
+ "no match found with that description or id": [
""
],
- "New order for template": [
+ "You must enter a valid product identifier.": [
""
],
- "Amount of the order": [
+ "Quantity must be greater than 0!": [
""
],
- "Order summary": [
+ "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
""
],
- "could not create order from template": [
+ "Search product": [
""
],
- "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [
+ "Quantity": [
""
],
- "Fixed amount": [
+ "How many products will be added": [
""
],
- "Default amount": [
+ "Add from inventory": [
""
],
- "Default summary": [
+ "Image must be smaller than 1 MB": [
""
],
- "Print": [
+ "Add": [
""
],
- "Setup TOTP": [
+ "Remove": [
""
],
- "Templates": [
+ "Invalid": [
""
],
- "add new templates": [
+ "This product has %1$s applicable taxes configured.": [
""
],
- "load more templates before the first one": [
+ "No taxes configured for this product.": [
""
],
- "load newer templates": [
+ "Amount": [
""
],
- "delete selected templates from the database": [
+ "Taxes can be in currencies that differ from the main currency used by the merchant.": [
""
],
- "use template to create new order": [
+ "Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.": [
""
],
- "create qr code for the template": [
+ "Legal name of the tax, e.g. VAT or import duties.": [
""
],
- "load more templates after the last one": [
+ "Add tax to the tax list": [
""
],
- "load older templates": [
+ "Describe and add a product that is not in the inventory list": [
""
],
- "There is no templates yet, add more pressing the + sign": [
+ "Add custom product": [
""
],
- "template delete successfully": [
+ "Complete information of the product": [
""
],
- "could not delete the template": [
+ "Must be a number": [
""
],
- "could not update template": [
+ "Must be grater than 0": [
""
],
- "should be one of '%1$s'": [
+ "Image": [
""
],
- "Webhook ID to use": [
+ "Photo of the product.": [
""
],
- "Event": [
+ "Full product description.": [
""
],
- "The event of the webhook: why the webhook is used": [
+ "Unit": [
""
],
- "Method": [
+ "Name of the product unit.": [
""
],
- "Method used by the webhook": [
+ "Price": [
""
],
- "URL": [
+ "Amount in the current currency.": [
""
],
- "URL of the webhook where the customer will be redirected": [
+ "How many products will be added.": [
""
],
- "Header": [
+ "Taxes": [
""
],
- "Header template of the webhook": [
+ "Unit price": [
""
],
- "Body": [
+ "Total price": [
""
],
- "Body template by the webhook": [
+ "Must be greater than 0": [
""
],
- "Webhooks": [
+ "Refund deadline can't be before pay deadline": [
""
],
- "add new webhooks": [
+ "Wire transfer deadline can't be before refund deadline": [
""
],
- "load more webhooks before the first one": [
+ "Wire transfer deadline can't be before pay deadline": [
""
],
- "load newer webhooks": [
+ "Must have a refund deadline": [
""
],
- "Event type": [
+ "Auto refund can't be after refund deadline": [
""
],
- "delete selected webhook from the database": [
+ "Must be in the future": [
""
],
- "load more webhooks after the last one": [
+ "Simple": [
""
],
- "load older webhooks": [
+ "Advanced": [
""
],
- "There is no webhooks yet, add more pressing the + sign": [
+ "Manage products in order": [
""
],
- "webhook delete successfully": [
+ "%1$s products with a total price of %2$s.": [
""
],
- "could not delete the webhook": [
+ "Manage list of products in the order.": [
""
],
- "check the id, does not look valid": [
+ "Remove this product from the order.": [
""
],
- "should have 52 characters, current %1$s": [
+ "Total product price added up": [
""
],
- "URL doesn't have the right format": [
+ "Amount to be paid by the customer": [
""
],
- "Credited bank account": [
+ "Order price": [
""
],
- "Select one account": [
+ "Final order price": [
""
],
- "Bank account of the merchant where the payment was received": [
+ "Summary": [
""
],
- "Wire transfer ID": [
+ "Title of the order to be shown to the customer": [
""
],
- "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "Shipping and Fulfillment": [
""
],
- "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
+ "Delivery date": [
""
],
- "Amount credited": [
+ "Deadline for physical delivery assured by the merchant.": [
""
],
- "Actual amount that was wired to the merchant's bank account": [
+ "Location": [
""
],
- "could not inform transfer": [
+ "Address where the products will be delivered": [
""
],
- "Transfers": [
+ "Fulfillment URL": [
""
],
- "add new transfer": [
+ "URL to which the user will be redirected after successful payment.": [
""
],
- "load more transfers before the first one": [
+ "Taler payment options": [
""
],
- "load newer transfers": [
+ "Override default Taler payment settings for this order": [
""
],
- "Credit": [
+ "Payment time": [
""
],
- "Confirmed": [
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
""
],
- "Verified": [
+ "Default": [
""
],
- "Executed at": [
+ "Refund time": [
""
],
- "yes": [
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
""
],
- "no": [
+ "Wire transfer time": [
""
],
- "unknown": [
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
""
],
- "delete selected transfer from the database": [
+ "Auto-refund time": [
""
],
- "load more transfer after the last one": [
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
""
],
- "load older transfers": [
+ "Maximum fee": [
""
],
- "There is no transfer yet, add more pressing the + sign": [
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
""
],
- "filter by account address": [
+ "Create token": [
""
],
- "only show wire transfers confirmed by the merchant": [
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
""
],
- "only show wire transfers claimed by the exchange": [
+ "Minimum age required": [
""
],
- "Unverified": [
+ "Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products": [
""
],
- "is not valid": [
+ "Min age defined by the producs is %1$s": [
""
],
- "is not a number": [
+ "No product with age restriction in this order": [
""
],
- "must be 1 or greater": [
+ "Additional information": [
""
],
- "max 7 lines": [
+ "Custom information to be included in the contract for this order.": [
""
],
- "change authorization configuration": [
+ "You must enter a value in JavaScript Object Notation (JSON).": [
""
],
- "Need to complete marked fields and choose authorization method": [
+ "Custom field name": [
""
],
- "This is not a valid bitcoin address.": [
+ "Disabled": [
""
],
- "This is not a valid Ethereum address.": [
+ "No deadline": [
""
],
- "IBAN numbers usually have more that 4 digits": [
+ "Deadline at %1$s": [
""
],
- "IBAN numbers usually have less that 34 digits": [
+ "Could not create order": [
""
],
- "IBAN country code not found": [
+ "No exchange would accept a payment because of KYC requirements.": [
""
],
- "IBAN number is not valid, checksum is wrong": [
+ "No more stock for product with id \"%1$s\".": [
""
],
- "Target type": [
+ "Orders": [
""
],
- "Method to use for wire transfer": [
+ "Create order": [
""
],
- "Routing": [
+ "Load first page": [
""
],
- "Routing number.": [
+ "Date": [
""
],
- "Account": [
+ "Refund": [
""
],
- "Account number.": [
+ "copy url": [
""
],
- "Business Identifier Code.": [
+ "Load more orders after the last one": [
""
],
- "Bank Account Number.": [
+ "Load next page": [
""
],
- "Unified Payment Interface.": [
+ "No orders have been found matching your query!": [
""
],
- "Bitcoin protocol.": [
+ "Duplicated": [
""
],
- "Ethereum protocol.": [
+ "This value exceed the refundable amount": [
""
],
- "Interledger protocol.": [
+ "Amount to be refunded": [
""
],
- "Host": [
+ "Max refundable:": [
""
],
- "Bank host.": [
+ "Requested by the customer": [
""
],
- "Bank account.": [
+ "Other": [
""
],
- "Bank account owner's name.": [
+ "Why this order is being refunded": [
""
],
- "No accounts yet.": [
+ "More information to give context": [
""
],
- "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Contract Terms": [
""
],
- "Business name": [
+ "Human-readable description of the whole purchase": [
""
],
- "Legal name of the business represented by this instance.": [
+ "Total price for the transaction": [
""
],
- "Email": [
+ "URL for this purchase": [
""
],
- "Contact email": [
+ "Max fee": [
""
],
- "Website URL": [
+ "Maximum total deposit fee accepted by the merchant for this contract": [
""
],
- "URL.": [
+ "Created at": [
""
],
- "Logo": [
+ "Time when this contract was generated": [
""
],
- "Logo image.": [
+ "Refund deadline": [
""
],
- "Bank account": [
+ "After this deadline has passed no refunds will be accepted": [
""
],
- "URI specifying bank account for crediting revenue.": [
+ "Payment deadline": [
""
],
- "Default max deposit fee": [
+ "After this deadline, the merchant won't accept payments for the contract": [
""
],
- "Maximum deposit fees this merchant is willing to pay per order by default.": [
+ "Wire transfer deadline": [
""
],
- "Default max wire fee": [
+ "Transfer deadline for the exchange": [
""
],
- "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [
+ "Time indicating when the order should be delivered": [
""
],
- "Default wire fee amortization": [
+ "Where the order will be delivered": [
""
],
- "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [
+ "Auto-refund delay": [
""
],
- "Physical location of the merchant.": [
+ "How long the wallet should try to get an automatic refund for the purchase": [
""
],
- "Jurisdiction": [
+ "Extra info": [
""
],
- "Jurisdiction for legal disputes with the merchant.": [
+ "Extra data that is only interpreted by the merchant frontend": [
""
],
- "Default payment delay": [
+ "Order": [
""
],
- "Time customers have to pay an order before the offer expires by default.": [
+ "Claimed": [
""
],
- "Default wire transfer delay": [
+ "Claimed at": [
""
],
- "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
+ "Timeline": [
""
],
- "Instance id": [
+ "Payment details": [
""
],
- "Change the authorization method use for this instance.": [
+ "Order status": [
""
],
- "Manage access token": [
+ "Product list": [
""
],
- "Failed to create instance": [
+ "Paid": [
""
],
- "Login required": [
+ "Wired": [
""
],
- "Please enter your access token.": [
+ "Refunded": [
""
],
- "Access Token": [
+ "Refund order": [
""
],
- "The request to the backend take too long and was cancelled": [
+ "Not refundable": [
""
],
- "Diagnostic from %1$s is \"%2$s\"": [
+ "Next event in": [
""
],
- "The backend reported a problem: HTTP status #%1$s": [
+ "Refunded amount": [
""
],
- "Diagnostic from %1$s is '%2$s'": [
+ "Refund taken": [
""
],
- "Access denied": [
+ "Status URL": [
""
],
- "The access token provided is invalid.": [
+ "Refund URI": [
""
],
- "No 'default' instance configured yet.": [
+ "Unpaid": [
""
],
- "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Pay at": [
""
],
- "The access token provided is invalid": [
+ "Order status URL": [
""
],
- "Hide for today": [
+ "Payment URI": [
""
],
- "Instance": [
+ "Unknown order status. This is an error, please contact the administrator.": [
""
],
- "Settings": [
+ "Back": [
""
],
- "Connection": [
+ "Refund created successfully": [
+ ""
+ ],
+ "Could not create the refund": [
+ ""
+ ],
+ "There are pending KYC requirements.": [
+ ""
+ ],
+ "Missing id": [
+ ""
+ ],
+ "Not found": [
+ ""
+ ],
+ "Select date to show nearby orders": [
+ ""
+ ],
+ "Only show paid orders": [
""
],
"New": [
""
],
- "List": [
+ "Only show orders with refunds": [
""
],
- "Log out": [
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
""
],
- "Check your token is valid": [
+ "Not wired": [
""
],
- "Couldn't access the server.": [
+ "Completed": [
""
],
- "Could not infer instance id from url %1$s": [
+ "Remove all filters": [
""
],
- "Server not found": [
+ "Clear date filter": [
""
],
- "Server response with an error code": [
+ "Jump to date (%1$s)": [
""
],
- "Got message %1$s from %2$s": [
+ "Jump to order with the given product ID": [
""
],
- "Response from server is unreadable, http status: %1$s": [
+ "Order id": [
""
],
- "Unexpected Error": [
+ "Invalid. Only characters and numbers": [
""
],
- "The value %1$s is invalid for a payment url": [
+ "Just letters and numbers from 2 to 7": [
""
],
- "add element to the list": [
+ "Size of the key must be 32": [
""
],
- "add": [
+ "Internal id on the system": [
""
],
- "Deleting": [
+ "Useful to identify the device physically": [
""
],
- "Changing": [
+ "Verification algorithm": [
""
],
- "Order ID": [
+ "Algorithm to use to verify transaction in offline mode": [
""
],
- "Payment URL": [
+ "Device key": [
""
- ]
- }
- }
-};
-
-strings['sv'] = {
- "domain": "messages",
- "locale_data": {
- "messages": {
- "": {
- "domain": "messages",
- "plural_forms": "nplurals=2; plural=(n != 1);",
- "lang": ""
- },
- "Cancel": [
+ ],
+ "Be sure to be very hard to guess or use the random generator": [
""
],
- "%1$s": [
+ "Your device need to have exactly the same value": [
""
],
- "Close": [
+ "Generate random secret key": [
""
],
- "Continue": [
+ "Random": [
""
],
- "Clear": [
+ "You can scan the next QR code with your device or save the key before continuing.": [
""
],
- "Confirm": [
+ "Device added successfully": [
""
],
- "is not the same as the current access token": [
+ "Could not add device": [
""
],
- "cannot be empty": [
+ "OTP Devices": [
""
],
- "cannot be the same as the old token": [
+ "Add new devices": [
""
],
- "is not the same": [
+ "Load more devices before the first one": [
""
],
- "You are updating the access token from instance with id %1$s": [
+ "Delete selected devices from the database": [
""
],
- "Old access token": [
+ "Load more devices after the last one": [
""
],
- "access token currently in use": [
+ "There is no devices yet, add more pressing the + sign": [
""
],
- "New access token": [
+ "Device delete successfully": [
""
],
- "next access token to be used": [
+ "Could not delete the device": [
""
],
- "Repeat access token": [
+ "Device:": [
""
],
- "confirm the same access token": [
+ "Not modified": [
""
],
- "Clearing the access token will mean public access to the instance": [
+ "Change key": [
""
],
- "cannot be the same as the old access token": [
+ "Could not update template": [
""
],
- "You are setting the access token for the new instance": [
+ "Template id is unknown": [
""
],
- "With external authorization method no check will be done by the merchant backend": [
+ "The provided information is inconsistent with the current state of the template": [
""
],
- "Set external authorization": [
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
""
],
- "Set access token": [
+ "Manage stock": [
""
],
- "Operation in progress...": [
+ "This product has been configured without stock control": [
""
],
- "The operation will be automatically canceled after %1$s seconds": [
+ "Infinite": [
""
],
- "Instances": [
+ "Lost can't be greater than current and incoming (max %1$s)": [
""
],
- "Delete": [
+ "Incoming": [
""
],
- "add new instance": [
+ "Lost": [
""
],
- "ID": [
+ "Current": [
""
],
- "Name": [
+ "Remove stock control for this product": [
""
],
- "Edit": [
+ "without stock": [
""
],
- "Purge": [
+ "Next restock": [
""
],
- "There is no instances yet, add more pressing the + sign": [
+ "Warehouse address": [
""
],
- "Only show active instances": [
+ "Add element to the list": [
""
],
- "Active": [
+ "Invalid amount": [
""
],
- "Only show deleted instances": [
+ "Product identification to use in URLs (for internal use only).": [
""
],
- "Deleted": [
+ "Illustration of the product for customers.": [
""
],
- "Show all instances": [
+ "Product description for customers.": [
""
],
- "All": [
+ "Age restriction": [
""
],
- "Instance \"%1$s\" (ID: %2$s) has been deleted": [
+ "Is this product restricted for customer below certain age?": [
""
],
- "Failed to delete instance": [
+ "Minimum age of the customer": [
""
],
- "Instance '%1$s' (ID: %2$s) has been disabled": [
+ "Unit name": [
""
],
- "Failed to purge instance": [
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
""
],
- "Pending KYC verification": [
+ "Example: kg, items or liters": [
""
],
- "Timed out": [
+ "Price per unit": [
""
],
- "Exchange": [
+ "Sale price for customers, including taxes, for above units of the product.": [
""
],
- "Target account": [
+ "Stock": [
""
],
- "KYC URL": [
+ "Inventory for products with finite supply (for internal use only).": [
""
],
- "Code": [
+ "Taxes included in the product price, exposed to customers.": [
""
],
- "Http Status": [
+ "Categories": [
""
],
- "No pending kyc verification!": [
+ "Search by category description or id": [
""
],
- "change value to unknown date": [
+ "Categories where this product will be listed on.": [
""
],
- "change value to empty": [
+ "Product created successfully": [
""
],
- "clear": [
+ "Could not create product": [
""
],
- "change value to never": [
+ "Inventory": [
""
],
- "never": [
+ "Add product to inventory": [
""
],
- "Country": [
+ "Sales": [
""
],
- "Address": [
+ "Sold": [
""
],
- "Building number": [
+ "Free": [
""
],
- "Building name": [
+ "Go to product update page": [
""
],
- "Street": [
+ "Update": [
""
],
- "Post code": [
+ "Remove this product from the database": [
""
],
- "Town location": [
+ "Load more products after the last one": [
""
],
- "Town": [
+ "Update the product with new price": [
""
],
- "District": [
+ "Update product with new price": [
""
],
- "Country subdivision": [
+ "Confirm update": [
+ ""
+ ],
+ "Add more elements to the inventory": [
+ ""
+ ],
+ "Report elements lost in the inventory": [
+ ""
+ ],
+ "New price for the product": [
+ ""
+ ],
+ "The are value with errors": [
+ ""
+ ],
+ "Update product with new stock and price": [
+ ""
+ ],
+ "There is no products yet, add more pressing the + sign": [
+ ""
+ ],
+ "Jump to product with the given product ID": [
""
],
"Product id": [
""
],
- "Description": [
+ "Product updated successfully": [
""
],
- "Product": [
+ "Could not update the product": [
""
],
- "search products by it's description or id": [
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "no products found with that description": [
+ "Could not delete the product": [
""
],
- "You must enter a valid product identifier.": [
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
""
],
- "Quantity must be greater than 0!": [
+ "Deleting an product can't be undone.": [
""
],
- "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
+ "Product id:": [
""
],
- "Quantity": [
+ "Product (ID: %1$s) has been updated": [
""
],
- "how many products will be added": [
+ "Could not update product": [
""
],
- "Add from inventory": [
+ "Invalid. only characters and numbers": [
""
],
- "Image should be smaller than 1 MB": [
+ "Must be greater that 0": [
""
],
- "Add": [
+ "To short": [
""
],
- "Remove": [
+ "Identifier": [
""
],
- "No taxes configured for this product.": [
+ "Name of the template in URLs.": [
""
],
- "Amount": [
+ "Describe what this template stands for": [
""
],
- "Taxes can be in currencies that differ from the main currency used by the merchant.": [
+ "If specified, this template will create order with the same summary": [
""
],
- "Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.": [
+ "Summary is editable": [
""
],
- "Legal name of the tax, e.g. VAT or import duties.": [
+ "Allow the user to change the summary.": [
""
],
- "add tax to the tax list": [
+ "If specified, this template will create order with the same price": [
""
],
- "describe and add a product that is not in the inventory list": [
+ "Amount is editable": [
""
],
- "Add custom product": [
+ "Allow the user to select the amount to pay.": [
""
],
- "Complete information of the product": [
+ "Currency is editable": [
""
],
- "Image": [
+ "Allow the user to change currency.": [
""
],
- "photo of the product": [
+ "Supported currencies": [
""
],
- "full product description": [
+ "Supported currencies: %1$s": [
""
],
- "Unit": [
+ "Minimum age": [
""
],
- "name of the product unit": [
+ "Is this contract restricted to some age?": [
""
],
- "Price": [
+ "Payment timeout": [
""
],
- "amount in the current currency": [
+ "How much time has the customer to complete the payment once the order was created.": [
""
],
- "Taxes": [
+ "OTP device": [
""
],
- "image": [
+ "Use to verify transaction while offline.": [
""
],
- "description": [
+ "No OTP device.": [
""
],
- "quantity": [
+ "Add one first": [
""
],
- "unit price": [
+ "No device": [
""
],
- "total price": [
+ "Use to verify transaction in offline mode.": [
""
],
- "required": [
+ "Template has been created": [
""
],
- "not valid": [
+ "Could not create template": [
""
],
- "must be greater than 0": [
+ "Templates": [
""
],
- "not a valid json": [
+ "Add new templates": [
""
],
- "should be in the future": [
+ "Load more templates before the first one": [
""
],
- "refund deadline cannot be before pay deadline": [
+ "Delete selected templates from the database": [
""
],
- "wire transfer deadline cannot be before refund deadline": [
+ "Use template to create new order": [
""
],
- "wire transfer deadline cannot be before pay deadline": [
+ "Use template": [
""
],
- "should have a refund deadline": [
+ "Create qr code for the template": [
""
],
- "auto refund cannot be after refund deadline": [
+ "Load more templates after the last one": [
""
],
- "Manage products in order": [
+ "There is no templates yet, add more pressing the + sign": [
""
],
- "Manage list of products in the order.": [
+ "Jump to template with the given template ID": [
""
],
- "Remove this product from the order.": [
+ "Template identification": [
""
],
- "Total price": [
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "total product price added up": [
+ "Failed to delete template": [
""
],
- "Amount to be paid by the customer": [
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
""
],
- "Order price": [
+ "Deleting an template": [
""
],
- "final order price": [
+ "can't be undone": [
""
],
- "Summary": [
+ "Print": [
""
],
- "Title of the order to be shown to the customer": [
+ "Too short": [
""
],
- "Shipping and Fulfillment": [
+ "Template (ID: %1$s) has been updated": [
""
],
- "Delivery date": [
+ "Amount is required": [
""
],
- "Deadline for physical delivery assured by the merchant.": [
+ "Order summary is required": [
""
],
- "Location": [
+ "New order for template": [
""
],
- "address where the products will be delivered": [
+ "Amount of the order": [
""
],
- "Fulfillment URL": [
+ "Order summary": [
""
],
- "URL to which the user will be redirected after successful payment.": [
+ "Could not create order from template": [
""
],
- "Taler payment options": [
+ "You need your access token to perform the operation": [
""
],
- "Override default Taler payment settings for this order": [
+ "You are updating the access token from instance with id \"%1$s\"": [
""
],
- "Payment deadline": [
+ "This instance doesn't have authentication token.": [
""
],
- "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [
+ "You can leave it empty if there is another layer of security.": [
""
],
- "Refund deadline": [
+ "Current access token": [
""
],
- "Time until which the order can be refunded by the merchant.": [
+ "Clearing the access token will mean public access to the instance.": [
""
],
- "Wire transfer deadline": [
+ "Clear token": [
""
],
- "Deadline for the exchange to make the wire transfer.": [
+ "Confirm change": [
""
],
- "Auto-refund deadline": [
+ "Failed to clear token": [
""
],
- "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "Failed to set new token": [
""
],
- "Maximum deposit fee": [
+ "Slug": [
""
],
- "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "Token family slug to use in URLs (for internal use only)": [
""
],
- "Maximum wire fee": [
+ "Kind": [
""
],
- "Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.": [
+ "Token family kind": [
""
],
- "Wire fee amortization": [
+ "User-readable token family name": [
""
],
- "Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.": [
+ "Token family description for customers": [
""
],
- "Create token": [
+ "Valid After": [
""
],
- "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [
+ "Token family can issue tokens after this date": [
""
],
- "Minimum age required": [
+ "Valid Before": [
""
],
- "Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products": [
+ "Token family can issue tokens until this date": [
""
],
- "Min age defined by the producs is %1$s": [
+ "Duration": [
""
],
- "Additional information": [
+ "Validity duration of a issued token": [
""
],
- "Custom information to be included in the contract for this order.": [
+ "Token familty created successfully": [
""
],
- "You must enter a value in JavaScript Object Notation (JSON).": [
+ "Could not create token family": [
""
],
- "days": [
+ "Token Families": [
""
],
- "hours": [
+ "Add token family": [
""
],
- "minutes": [
+ "Go to token family update page": [
""
],
- "seconds": [
+ "Remove this token family from the database": [
""
],
- "forever": [
+ "There are no token families yet, add the first one by pressing the + sign.": [
""
],
- "%1$sM": [
+ "Token family updated successfully": [
""
],
- "%1$sY": [
+ "Could not update the token family": [
""
],
- "%1$sd": [
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
""
],
- "%1$sh": [
+ "Failed to delete token family": [
""
],
- "%1$smin": [
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
""
],
- "%1$ssec": [
+ "Deleting a token family %1$s .": [
""
],
- "Orders": [
+ "Token Family: %1$s": [
""
],
- "create order": [
+ "Token familty updated successfully": [
""
],
- "load newer orders": [
+ "Could not update token family": [
""
],
- "Date": [
+ "Check the id, does not look valid": [
""
],
- "Refund": [
+ "Must have 52 characters, current %1$s": [
""
],
- "copy url": [
+ "URL doesn't have the right format": [
""
],
- "load older orders": [
+ "Credited bank account": [
""
],
- "No orders have been found matching your query!": [
+ "Select one account": [
""
],
- "duplicated": [
+ "Bank account of the merchant where the payment was received": [
""
],
- "invalid format": [
+ "Wire transfer ID": [
""
],
- "this value exceed the refundable amount": [
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
""
],
- "date": [
+ "Exchange URL": [
""
],
- "amount": [
+ "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
""
],
- "reason": [
+ "Amount credited": [
""
],
- "amount to be refunded": [
+ "Actual amount that was wired to the merchant's bank account": [
""
],
- "Max refundable:": [
+ "Wire transfer informed successfully": [
""
],
- "Reason": [
+ "Could not inform transfer": [
""
],
- "Choose one...": [
+ "Transfers": [
""
],
- "requested by the customer": [
+ "Add new transfer": [
""
],
- "other": [
+ "Load more transfers before the first one": [
""
],
- "why this order is being refunded": [
+ "Credit": [
""
],
- "more information to give context": [
+ "Confirmed": [
""
],
- "Contract Terms": [
+ "Verified": [
""
],
- "human-readable description of the whole purchase": [
+ "Executed at": [
""
],
- "total price for the transaction": [
+ "yes": [
""
],
- "URL for this purchase": [
+ "no": [
""
],
- "Max fee": [
+ "never": [
""
],
- "maximum total deposit fee accepted by the merchant for this contract": [
+ "unknown": [
""
],
- "Max wire fee": [
+ "Delete selected transfer from the database": [
""
],
- "maximum wire fee accepted by the merchant": [
+ "Load more transfers after the last one": [
""
],
- "over how many customer transactions does the merchant expect to amortize wire fees on average": [
+ "There is no transfer yet, add more pressing the + sign": [
""
],
- "Created at": [
+ "All accounts": [
""
],
- "time when this contract was generated": [
+ "Filter by account address": [
""
],
- "after this deadline has passed no refunds will be accepted": [
+ "Only show wire transfers confirmed by the merchant": [
""
],
- "after this deadline, the merchant won't accept payments for the contract": [
+ "Only show wire transfers claimed by the exchange": [
""
],
- "transfer deadline for the exchange": [
+ "Unverified": [
""
],
- "time indicating when the order should be delivered": [
+ "Wire transfer \"%1$s...\" has been deleted": [
""
],
- "where the order will be delivered": [
+ "Failed to delete transfer": [
""
],
- "Auto-refund delay": [
+ "Must be business or individual": [
""
],
- "how long the wallet should try to get an automatic refund for the purchase": [
+ "Pay delay can't be greater than wire transfer delay": [
""
],
- "Extra info": [
+ "Max 7 lines": [
""
],
- "extra data that is only interpreted by the merchant frontend": [
+ "Doesn't match": [
""
],
- "Order": [
+ "Enable access control": [
""
],
- "claimed": [
+ "Choose if the backend server should authenticate access.": [
""
],
- "claimed at": [
+ "Access control is not yet decided. This instance can't be created.": [
""
],
- "Timeline": [
+ "Authorization must be handled externally.": [
""
],
- "Payment details": [
+ "Authorization is handled by the backend server.": [
""
],
- "Order status": [
+ "Need to complete marked fields and choose authorization method": [
""
],
- "Product list": [
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
""
],
- "paid": [
+ "Business name": [
""
],
- "wired": [
+ "Legal name of the business represented by this instance.": [
""
],
- "refunded": [
+ "Email": [
""
],
- "refund order": [
+ "Contact email": [
""
],
- "not refundable": [
+ "Website URL": [
""
],
- "refund": [
+ "URL.": [
""
],
- "Refunded amount": [
+ "Logo": [
""
],
- "Refund taken": [
+ "Logo image.": [
""
],
- "Status URL": [
+ "Physical location of the merchant.": [
""
],
- "Refund URI": [
+ "Jurisdiction": [
""
],
- "unpaid": [
+ "Jurisdiction for legal disputes with the merchant.": [
""
],
- "pay at": [
+ "Pay transaction fee": [
""
],
- "created at": [
+ "Assume the cost of the transaction of let the user pay for it.": [
""
],
- "Order status URL": [
+ "Default payment delay": [
""
],
- "Payment URI": [
+ "Time customers have to pay an order before the offer expires by default.": [
""
],
- "Unknown order status. This is an error, please contact the administrator.": [
+ "Default wire transfer delay": [
""
],
- "Back": [
+ "Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
""
],
- "refund created successfully": [
+ "Instance id": [
""
],
- "could not create the refund": [
+ "Failed to update instance": [
""
],
- "select date to show nearby orders": [
+ "Must be \"pay\" or \"refund\"": [
""
],
- "order id": [
+ "Must be one of '%1$s'": [
""
],
- "jump to order with the given order ID": [
+ "Webhook ID to use": [
""
],
- "remove all filters": [
+ "Event": [
""
],
- "only show paid orders": [
+ "Pay": [
""
],
- "Paid": [
+ "The event of the webhook: why the webhook is used": [
""
],
- "only show orders with refunds": [
+ "Method": [
""
],
- "Refunded": [
+ "GET": [
""
],
- "only show orders where customers paid, but wire payments from payment provider are still pending": [
+ "POST": [
""
],
- "Not wired": [
+ "PUT": [
""
],
- "clear date filter": [
+ "PATCH": [
""
],
- "date (YYYY/MM/DD)": [
+ "HEAD": [
""
],
- "Enter an order id": [
+ "Method used by the webhook": [
""
],
- "order not found": [
+ "URL": [
""
],
- "could not get the order to refund": [
+ "URL of the webhook where the customer will be redirected": [
""
],
- "Loading...": [
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
""
],
- "click here to configure the stock of the product, leave it as is and the backend will not control stock": [
+ "For example %1$s will be replaced with the the order's price": [
""
],
- "Manage stock": [
+ "The short list of variables are:": [
""
],
- "this product has been configured without stock control": [
+ "order's description": [
""
],
- "Infinite": [
+ "order's price": [
""
],
- "lost cannot be greater than current and incoming (max %1$s)": [
+ "order's unique identification": [
""
],
- "Incoming": [
+ "the amount that was being refunded": [
""
],
- "Lost": [
+ "the reason entered by the merchant staff for granting the refund": [
""
],
- "Current": [
+ "time of the refund in nanoseconds since 1970": [
""
],
- "remove stock control for this product": [
+ "Http body": [
""
],
- "without stock": [
+ "Body template by the webhook": [
""
],
- "Next restock": [
+ "Webhook create successfully": [
""
],
- "Delivery address": [
+ "Could not create the webhook": [
""
],
- "product identification to use in URLs (for internal use only)": [
+ "Could not create webhook": [
""
],
- "illustration of the product for customers": [
+ "Webhooks": [
""
],
- "product description for customers": [
+ "Add new webhooks": [
""
],
- "Age restricted": [
+ "Load more webhooks before the first one": [
""
],
- "is this product restricted for customer below certain age?": [
+ "Event type": [
""
],
- "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [
+ "Delete selected webhook from the database": [
""
],
- "sale price for customers, including taxes, for above units of the product": [
+ "Load more webhooks after the last one": [
""
],
- "Stock": [
+ "There is no webhooks yet, add more pressing the + sign": [
""
],
- "product inventory for products with finite supply (for internal use only)": [
+ "Webhook delete successfully": [
""
],
- "taxes included in the product price, exposed to customers": [
+ "Could not delete the webhook": [
""
],
- "Need to complete marked fields": [
+ "Header": [
""
],
- "could not create product": [
+ "Header template of the webhook": [
""
],
- "Products": [
+ "Body": [
""
],
- "add product to inventory": [
+ "Webhook updated": [
""
],
- "Sell": [
+ "Could not update webhook": [
""
],
- "Profit": [
+ "Language": [
""
],
- "Sold": [
+ "Advance order creation": [
""
],
- "free": [
+ "Shows more options in the order creation form": [
""
],
- "go to product update page": [
+ "Advance instance settings": [
""
],
- "Update": [
+ "Shows more options in the instance settings form": [
""
],
- "remove this product from the database": [
+ "Date format": [
""
],
- "update the product with new price": [
+ "How the date is going to be displayed": [
""
],
- "update product with new price": [
+ "Developer mode": [
""
],
- "add more elements to the inventory": [
+ "Shows more options and tools which are not intended for general audience.": [
""
],
- "report elements lost in the inventory": [
+ "Total products": [
""
],
- "new price for the product": [
+ "Delete selected category from the database": [
""
],
- "the are value with errors": [
+ "There is no categories yet, add more pressing the + sign": [
""
],
- "update product with new stock and price": [
+ "Category delete successfully": [
""
],
- "There is no products yet, add more pressing the + sign": [
+ "Could not delete the category": [
""
],
- "product updated successfully": [
+ "Category name": [
""
],
- "could not update the product": [
+ "Category added successfully": [
""
],
- "product delete successfully": [
+ "Could not add category": [
""
],
- "could not delete the product": [
+ "Id:": [
""
],
- "Product id:": [
+ "Name of the category": [
""
],
- "To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.": [
+ "Products": [
""
],
- "If your system supports RFC 8905, you can do this by opening this URI:": [
+ "Search by product description or id": [
""
],
- "it should be greater than 0": [
+ "Products that this category will list.": [
""
],
- "must be a valid URL": [
+ "Could not update category": [
""
],
- "Initial balance": [
+ "Category id is unknown": [
""
],
- "balance prior to deposit": [
+ "Without this the merchant backend will refuse to create new orders.": [
""
],
- "Exchange URL": [
+ "Hide for today": [
+ ""
+ ],
+ "KYC verification needed": [
""
],
- "URL of exchange": [
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
""
],
- "Next": [
+ "Configuration": [
""
],
- "Wire method": [
+ "Settings": [
""
],
- "method to use for wire transfer": [
+ "Access token": [
""
],
- "Select one wire method": [
+ "Connection": [
""
],
- "could not create reserve": [
+ "Interface": [
""
],
- "Valid until": [
+ "List": [
+ ""
+ ],
+ "Log out": [
+ ""
+ ],
+ "Failed to create instance": [
+ ""
+ ],
+ "checking compatibility with server...": [
+ ""
+ ],
+ "Contacting the server failed": [
+ ""
+ ],
+ "The server version is not supported": [
+ ""
+ ],
+ "Supported version \"%1$s\", server version \"%2$s\".": [
+ ""
+ ],
+ "Deleting": [
+ ""
+ ],
+ "Changing": [
+ ""
+ ],
+ "Manage access token": [
+ ""
+ ],
+ "Business Name": [
+ ""
+ ],
+ "Order ID": [
+ ""
+ ],
+ "Payment URL": [
""
+ ]
+ }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=(n != 1);",
+ "lang": "",
+ "completeness": 0
+};
+
+strings['de'] = {
+ "locale_data": {
+ "messages": {
+ "": {
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "de"
+ },
+ "The request reached a timeout, check your connection.": [
+ "Die Anfrage hat ihr Zeitlimit erreicht, überprüfen Sie bitte Ihre Internetverbindung."
+ ],
+ "The request was cancelled.": [
+ "Die Anfrage wurde abgebrochen."
+ ],
+ "A lot of request were made to the same server and this action was throttled.": [
+ "Es wurden gleichzeitig zu viele Anfragen an denselben Server gestellt, daher ist diese Aktion zurückgestellt worden."
+ ],
+ "The response of the request is malformed.": [
+ "Die Antwort auf die Anfrage wird nicht richtig dargestellt."
+ ],
+ "Could not complete the request due to a network problem.": [
+ "Die Anfrage konnte aufgrund eines Netzwerkproblems nicht abgeschlossen werden."
+ ],
+ "Unexpected request error.": [
+ "Unerwarteter Fehler bei der Anfrage."
+ ],
+ "Unexpected error.": [
+ "Unerwarteter Fehler."
+ ],
+ "Cancel": [
+ "Abbrechen"
+ ],
+ "%1$s": [
+ "%1$s"
+ ],
+ "Close": [
+ "Schließen"
+ ],
+ "Continue": [
+ "Weiter"
+ ],
+ "Clear": [
+ "Leeren"
+ ],
+ "Confirm": [
+ "Bestätigen"
+ ],
+ "Required": [
+ "Erforderlich"
+ ],
+ "Letter must be a JSON string": [
+ "Der Buchstabe muss eine JSON-Zeichenkette sein"
+ ],
+ "JSON string is invalid": [
+ "Die JSON-Zeichenkette ist ungültig"
+ ],
+ "Import": [
+ "Importieren"
+ ],
+ "Importing an account from the bank": [
+ "Ein Konto von der Bank importieren"
+ ],
+ "You can export your account settings from the Libeufin Bank's account profile. Paste the content in the next field.": [
+ "Sie können Ihre Kontoeinstellungen aus dem Kontoprofil der Libeufin-Bank exportieren. Fügen Sie den Inhalt im nächsten Feld ein."
+ ],
+ "Account information": [
+ "Kontoinformationen"
+ ],
+ "Correct form": [
+ "Korrektur der Angaben"
+ ],
+ "Comparing account details": [
+ "Vergleich der Kontodetails"
+ ],
+ "Testing against the account info URL succeeded but the account information reported is different with the account details form.": [
+ "Die Prüfung der Kontoinformationen-URL war erfolgreich, aber die gemeldeten Kontoinformationen unterscheiden sich von der Kontodetails-Erfassung."
+ ],
+ "Field": [
+ "Feld"
+ ],
+ "In the form": [
+ "Im Formular"
+ ],
+ "Reported": [
+ "Gemeldet"
+ ],
+ "Type": [
+ "Typ"
+ ],
+ "IBAN": [
+ "IBAN"
+ ],
+ "Address": [
+ "Adresse"
+ ],
+ "Host": [
+ "Host"
+ ],
+ "Account id": [
+ "Konto-ID"
+ ],
+ "Owner's name": [
+ "Name des Eigentümers"
+ ],
+ "Account": [
+ "Konto"
+ ],
+ "Bank host": [
+ "Bankenserver (Bank host)."
+ ],
+ "Bank account": [
+ "Bankkonto"
],
- "Created balance": [
+ "BIC": [
""
],
- "Exchange balance": [
+ "Ok": [
""
],
- "Picked up": [
+ "Validate bank account: %1$s": [
+ "Bankkonten"
+ ],
+ "You need to make a bank transfer with the specified subject to validate that you are the owner of the account.": [
""
],
- "Committed": [
+ "Step 1:": [
""
],
- "Account address": [
+ "Copy this code and paste it into the subject/purpose field in your banking app or bank website": [
""
],
"Subject": [
+ "Verwendungszweck"
+ ],
+ "Step 2:": [
""
],
- "Tips": [
+ "Copy and paste this IBAN and the name into the receiver fields in your banking app or website": [
""
],
- "No tips has been authorized from this reserve": [
+ "Receiver name": [
+ "Lieferdatum"
+ ],
+ "Step 3:": [
""
],
- "Authorized": [
+ "Finish the wire transfer setting smallest amount in your banking app or website.": [
""
],
- "Expiration": [
+ "Make sure ALL data is correct, including the subject and you are using your selected bank account. You can use the copy buttons (%1$s) to prevent typing errors or the \"payto://\" URI below to copy just one value.": [
""
],
- "amount of tip": [
+ "Alternative if your bank already supports PayTo URI, you can use this %1$s link instead": [
""
],
- "Justification": [
+ "If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be able to process orders or refunds": [
+ "Wenn Sie die Instanz mit der Bezeichnung %1$s (ID: %2$s) löschen, wird der Verkäufer keine weiteren Bestellungen oder Rückerstattungen bearbeiten können"
+ ],
+ "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance.": [
+ "Dieser Vorgang löscht den privaten Schlüssel der Instanz, sichert jedoch alle Transaktionsdaten. Sie können auch nach der Löschung der Instanz auf diese Daten weiterhin zugreifen."
+ ],
+ "Deleting an instance %1$s .": [
+ "Löschung der Instanz %1$s ."
+ ],
+ "If you purge the instance named %1$s (ID: %2$s), you will also delete all it&apos;s transaction data.": [
+ "Falls Sie die Instanz %1$s (ID: %2$s) vollständig verwerfen, löschen Sie damit auch unwiderruflich alle Transaktionsdaten."
+ ],
+ "The instance will disappear from your list, and you will no longer be able to access it&apos;s data.": [
+ "Die Instanz wird von Ihrer Liste gestrichen und alle ihre Daten werden nicht mehr zugänglich sein."
+ ],
+ "Purging an instance %1$s .": [
+ "Die Instanz %1$s wird endgültig verworfen."
+ ],
+ "Is not the same as the current access token": [
+ "ist ohne Übereinstimmung mit dem bisherigen Zugangstoken"
+ ],
+ "Can't be the same as the old token": [
+ "muss sich vom alten Zugangstoken unterscheiden"
+ ],
+ "Is not the same": [
+ "ungleich"
+ ],
+ "You are updating the access token from instance with id %1$s": [
+ "Sie erneuern den Zugangstoken der Instanz mit der ID %1$s"
+ ],
+ "Old access token": [
+ "Alter Zugangstoken"
+ ],
+ "Access token currently in use": [
+ "Zugangstoken zurzeit in Verwendung"
+ ],
+ "New access token": [
+ "Neuer Zugangstoken"
+ ],
+ "Next access token to be used": [
+ "Folgender Zugangstoken für die zukünftige Verwendung"
+ ],
+ "Repeat access token": [
+ "Eingabe des Zugangstokens wiederholen"
+ ],
+ "Confirm the same access token": [
+ "Zugangstoken wiederholen"
+ ],
+ "Clearing the access token will mean public access to the instance": [
+ "Den Zugangstoken zu löschen ermöglicht den freien Zugang zur Instanz für alle"
+ ],
+ "Can't be the same as the old access token": [
+ "Muss sich vom alten Zugangstoken unterscheiden"
+ ],
+ "You are setting the access token for the new instance": [
+ "Sie speichern den Zugangstoken für eine neue Instanz"
+ ],
+ "With external authorization method no check will be done by the merchant backend": [
+ "Bei externen Verfahren der Berechtigungsprüfung erfolgt keine weitere Zugangsprüfung durch das Merchant-Backend"
+ ],
+ "Set external authorization": [
+ "Externe Zugangsberechtigung festlegen"
+ ],
+ "Set access token": [
+ "Zugangstoken festlegen"
+ ],
+ "Operation in progress...": [
+ "Die Verarbeitung ist im Gange..."
+ ],
+ "The operation will be automatically canceled after %1$s seconds": [
+ "Der Vorgang wird nach %1$s Sekunden automatisch abgebrochen"
+ ],
+ "Your password is incorrect": [
+ "Ihr Passwort ist ungültig"
+ ],
+ "Your instance not found": [
+ "Ihre Instanz wurde nicht gefunden"
+ ],
+ "Login required": [
+ "Anmeldung erforderlich"
+ ],
+ "Please enter your access token for %1$s.": [
+ "Bitte geben Sie Ihren Zugangstoken für %1$s ein."
+ ],
+ "Access Token": [
+ "Zugangstoken"
+ ],
+ "Instances": [
+ "Instanzen"
+ ],
+ "Delete": [
+ "Löschen"
+ ],
+ "Add new instance": [
+ "Neue Instanz hinzufügen"
+ ],
+ "ID": [
+ "ID"
+ ],
+ "Name": [
+ "Name"
+ ],
+ "Edit": [
+ "Bearbeiten"
+ ],
+ "Purge": [
+ "Vollständig verwerfen"
+ ],
+ "There is no instances yet, add more pressing the + sign": [
+ "Es gibt noch keine Instanz. Erstellen Sie eine, indem Sie auf das +-Zeichen drücken"
+ ],
+ "Only show active instances": [
+ "Zeige nur aktive Instanzen"
+ ],
+ "Active": [
+ "Aktiv"
+ ],
+ "Only show deleted instances": [
+ "Zeige nur gelöschte Instanzen"
+ ],
+ "Deleted": [
+ "Gelöscht"
+ ],
+ "Show all instances": [
+ "Zeige alle Instanzen"
+ ],
+ "All": [
+ "Alle"
+ ],
+ "Instance \"%1$s\" (ID: %2$s) has been deleted": [
+ "Instanz \"%1$s\" (ID: %2$s) wurde gelöscht"
+ ],
+ "Failed to delete instance": [
+ "Das Löschen der Instanz ist fehlgeschlagen"
+ ],
+ "Instance '%1$s' (ID: %2$s) has been purge": [
+ "Instanz '%1$s' (ID: %2$s) wurde vollständig gelöscht"
+ ],
+ "Failed to purge instance": [
+ "Die vollständige Löschung der Instanz ist fehlgeschlagen"
+ ],
+ "Loading...": [
+ "Die Daten werden eingelesen..."
+ ],
+ "This is not a valid bitcoin address.": [
+ "Dies ist keine zulässige Bitcoin-Adresse."
+ ],
+ "This is not a valid Ethereum address.": [
+ "Dies ist keine zulässige Ethereum-Adresse."
+ ],
+ "This is not a valid host.": [
+ "Dies ist kein gültiger Host."
+ ],
+ "IBAN numbers usually have more that 4 digits": [
+ "Eine IBAN besteht normalerweise aus mehr als 4 Ziffern"
+ ],
+ "IBAN numbers usually have less that 34 digits": [
+ "Eine IBAN besteht normalerweise aus weniger als 34 Ziffern"
+ ],
+ "IBAN country code not found": [
+ "IBAN-Ländercode wurde nicht gefunden"
+ ],
+ "IBAN number is invalid, checksum is wrong": [
+ "Die IBAN-Nummer ist ungültig, die Prüfsumme ist falsch"
+ ],
+ "Choose one...": [
+ "Bitte wählen Sie aus..."
+ ],
+ "Method to use for wire transfer": [
+ "Verfahren, das für die Überweisung genutzt werden soll"
+ ],
+ "Routing": [
+ "Bankleitzahlensystem"
+ ],
+ "Routing number.": [
+ "Bankleitzahl."
+ ],
+ "Account number.": [
+ "Kontonummer."
+ ],
+ "Code": [
+ "Code"
+ ],
+ "Business Identifier Code.": [
+ "Business Identifier Code. (BIC)."
+ ],
+ "International Bank Account Number.": [
+ "IBAN (Internationale Bankkontonummer)."
+ ],
+ "Unified Payment Interface.": [
+ "Unified Payment Interface (UPI)."
+ ],
+ "Bitcoin protocol.": [
+ "Bitcoin-Protokoll."
+ ],
+ "Ethereum protocol.": [
+ "Ethereum-Protokoll."
+ ],
+ "Interledger protocol.": [
+ "Interledger-Protokoll."
+ ],
+ "Bank host.": [
+ "Bankenserver (Bank host)."
+ ],
+ "Without scheme and may include subpath:": [
+ "Ohne Schema (kann einen Unterpfad enthalten):"
+ ],
+ "Bank account.": [
+ "Bankkonto."
+ ],
+ "Legal name of the person holding the account.": [
+ "Rechtsgültiger Name des Kontoinhabers."
+ ],
+ "It should match the bank account name.": [
+ "Die Eingabe sollte mit dem Bankkontonamen übereinstimmen."
+ ],
+ "Invalid url": [
+ "ungültige URL"
+ ],
+ "URL must end with a '/'": [
+ "Die URL muss mit '/' enden"
+ ],
+ "URL must not contain params": [
+ "Die URL darf keine Parameter enthalten"
+ ],
+ "URL must not hash param": [
+ "Die URL darf keinen Hash-Parameter enthalten"
+ ],
+ "The request to check the revenue API failed.": [
+ "Die Anfrage bei der Einzahlungs-Schnittstelle ist fehlgeschlagen."
+ ],
+ "Server replied with \"bad request\".": [
+ "Der Server antwortete mit \"bad request\"."
+ ],
+ "Unauthorized, check credentials.": [
+ "Unzulässiger Vorgang, bitte die Zugangsdaten (Token, Anmeldename, Passwort) überprüfen."
+ ],
+ "The endpoint doesn't seems to be a Taler Revenue API.": [
+ "Die Gegenstelle scheint keine Taler-Einzahlungsschnittstelle zu sein."
+ ],
+ "Request succeeded but server didn't reply the 'credit_account' so we can't check that the account is the same.": [
""
],
- "reason for the tip": [
+ "Account:": [
+ "Konto:"
+ ],
+ "If the bank supports Taler Revenue API then you can add the endpoint URL below to keep the revenue information in sync.": [
+ "Wenn die Bank die Taler-Einzahlungsschnittstelle unterstützt, können Sie die untenstehende Gegenstelle (endpoint URL) hinzufügen, um die Umsatzinformationen synchron zu halten."
+ ],
+ "Endpoint URL": [
+ "Gegenstelle (endpoint URL)"
+ ],
+ "From where the merchant can download information about incoming wire transfers to this account": [
+ "Informationsquelle zu eingehenden Überweisungen auf dieses Bankkonto"
+ ],
+ "Auth type": [
+ "Authentifizierungstyp"
+ ],
+ "Choose the authentication type for the account info URL": [
+ "Wählen Sie den Authentifizierungstyp für die Kontoinformations-URL"
+ ],
+ "Without authentication": [
+ "Ohne Authentifizierung"
+ ],
+ "With password": [
+ "Passwort"
+ ],
+ "With token": [
+ "Token erzeugen"
+ ],
+ "Do not change": [
+ "Lassen Sie dies unverändert"
+ ],
+ "Username": [
+ "Benutzername"
+ ],
+ "Username to access the account information.": [
+ "Benutzername für den Zugriff auf die Kontoinformationen."
+ ],
+ "Password": [
+ "Passwort"
+ ],
+ "Password to access the account information.": [
+ "Passwort für den Zugriff auf die Kontoinformationen."
+ ],
+ "Token": [
""
],
- "URL after tip": [
+ "Access token to access the account information.": [
+ "Benutzername für den Zugriff auf die Kontoinformationen."
+ ],
+ "Match": [
+ "Übereinstimmung"
+ ],
+ "Check where the information match against the server info.": [
+ "Prüfung der Übereinstimmung dieser Information und der Daten auf dem Server."
+ ],
+ "Not verified": [
+ "Nicht überprüft"
+ ],
+ "Last test was ok": [
+ "Der letzte Test war erfolgreich"
+ ],
+ "Last test failed": [
+ "Der letzte Test ist fehlgeschlagen"
+ ],
+ "Compare info from server with account form": [
+ "Vergleich der Information des Servers mit den Bankkonto-Formulardaten"
+ ],
+ "Test": [
+ "Test"
+ ],
+ "Need to complete marked fields": [
+ "Die gekennzeichneten Felder müssen ausgefüllt sein"
+ ],
+ "Confirm operation": [
+ "Vorgang bestätigen"
+ ],
+ "Account details": [
+ "Kontodetails"
+ ],
+ "Import from bank": [
+ "Datenimport von der Bank"
+ ],
+ "Could not create account": [
+ "Das Konto konnte nicht angelegt werden"
+ ],
+ "No 'default' instance configured yet.": [
+ "Es wurde keine Standardinstanz konfiguriert."
+ ],
+ "Create a 'default' instance to begin using the merchant backoffice.": [
+ "Erstellen Sie eine Standardinstanz, um das Merchant-Backend erstmalig zu verwenden."
+ ],
+ "Bank accounts": [
+ "Bankkonten"
+ ],
+ "Add new account": [
+ "Neues Konto hinzufügen"
+ ],
+ "Wire method: Bitcoin": [
+ "Überweisungsmethode: Bitcoin"
+ ],
+ "Sewgit 1": [
+ "SegWit 1"
+ ],
+ "Sewgit 2": [
+ "SegWit 2"
+ ],
+ "Delete selected accounts from the database": [
+ "Löschen ausgewählter Konten von der Datenbank"
+ ],
+ "Wire method: x-taler-bank": [
+ "Überweisungsmethode: x-taler-bank"
+ ],
+ "Account name": [
+ "Kontenbezeichnung (z.B. Name)"
+ ],
+ "Wire method: IBAN": [
+ "Überweisungsmethode: IBAN"
+ ],
+ "Other accounts": [
+ "Andere Konten"
+ ],
+ "Path": [
+ "Pfad"
+ ],
+ "There is no accounts yet, add more pressing the + sign": [
+ "Es sind noch keine Konten angelegt, Sie können diese durch das +-Zeichen hinzufügen"
+ ],
+ "You need to associate a bank account to receive revenue.": [
+ "Sie müssen ein Bankkonto verknüpfen, um Einnahmen aus Überweisungen auf dieses Konto zu erhalten."
+ ],
+ "Without this the you won't be able to create new orders.": [
+ "Ohne dies können Sie keine neuen Bestellungen erstellen."
+ ],
+ "Bank account delete successfully": [
+ "Die Verknüpfung mit dem Bankkonto wurde erfolgreich gelöscht"
+ ],
+ "Could not delete the bank account": [
+ "Die Verknüpfung mit dem Bankkonto konnte nicht gelöscht werden"
+ ],
+ "Could not update account": [
+ "Das Konto konnte nicht aktualisiert werden"
+ ],
+ "Could not delete account": [
+ "Die Kontoverbindung konnte nicht entfernt werden"
+ ],
+ "Pending KYC verification": [
+ "Ausstehende KYC-Prüfung"
+ ],
+ "Exchange": [
+ "Zahlungsdienstleister"
+ ],
+ "Reason": [
+ "Buchungsvermerk"
+ ],
+ "Pending KYC process, click here to complete": [
+ "Ausstehende KYC-Prüfung; klicken Sie hier, um den Vorgang abzuschließen"
+ ],
+ "The exchange require a account verification.": [
""
],
- "URL to visit after tip payment": [
+ "Http Status": [
+ "HTTP-Status"
+ ],
+ "No pending kyc verification!": [
+ "Eine KYC-Prüfung ist nicht (mehr) ausstehend!"
+ ],
+ "Change value to unknown date": [
+ "Wert auf unbekanntes Datum ändern"
+ ],
+ "Change value to empty": [
+ "Wert annullieren"
+ ],
+ "Change value to never": [
+ "Wert auf „nie“ setzen"
+ ],
+ "Never": [
+ "Nie"
+ ],
+ "days": [
+ "Tage"
+ ],
+ "hours": [
+ "Stunden"
+ ],
+ "minutes": [
+ "Minuten"
+ ],
+ "seconds": [
+ "Sekunden"
+ ],
+ "Forever": [
+ "Unbegrenzt"
+ ],
+ "%1$sM": [
+ "%1$sM"
+ ],
+ "%1$sY": [
+ "%1$sY"
+ ],
+ "%1$sd": [
+ "%1$sd"
+ ],
+ "%1$sh": [
+ "%1$sh"
+ ],
+ "%1$smin": [
+ "%1$smin"
+ ],
+ "%1$ssec": [
+ "%1$ssec"
+ ],
+ "Country": [
+ "Land"
+ ],
+ "Building number": [
+ "Zusätzliche Adressangabe"
+ ],
+ "Building name": [
+ "Bezeichnung des Gebäudes"
+ ],
+ "Street": [
+ "Str."
+ ],
+ "Post code": [
+ "Postleitzahl"
+ ],
+ "Town location": [
+ "Ortsteil"
+ ],
+ "Town": [
+ "Ort"
+ ],
+ "District": [
+ "Bezirk/Kanton"
+ ],
+ "Country subdivision": [
+ "Region"
+ ],
+ "Description": [
+ "Bezeichnung"
+ ],
+ "Enter description or id": [
+ "Bezeichnung oder ID eingeben"
+ ],
+ "no match found with that description or id": [
+ "Für diese Bezeichnung oder ID wurde nichts gefunden"
+ ],
+ "You must enter a valid product identifier.": [
+ "Sie müssen eine gültige Artikelkennung eingeben."
+ ],
+ "Quantity must be greater than 0!": [
+ "Die Menge muss größer als 0 sein!"
+ ],
+ "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [
+ "Diese Menge überschreitet den Bestand. Momentan sind nur %1$s Stück im Inventar ohne Vorbestellung."
+ ],
+ "Search product": [
+ "Artikel suchen"
+ ],
+ "Quantity": [
+ "Menge"
+ ],
+ "How many products will be added": [
+ "Wie viele Artikel hinzugefügt werden"
+ ],
+ "Add from inventory": [
+ "Vom Bestand hinzufügen"
+ ],
+ "Image must be smaller than 1 MB": [
+ "Die Bilddatei muss kleiner als 1 MB sein"
+ ],
+ "Add": [
+ "Hinzufügen"
+ ],
+ "Remove": [
+ "Entfernen"
+ ],
+ "Invalid": [
+ "Ungültig"
+ ],
+ "This product has %1$s applicable taxes configured.": [
+ "Für diesen Artikel ist ein Steuersatz von %1$s angelegt."
+ ],
+ "No taxes configured for this product.": [
+ "Für diesen Artikel sind keine Steuern angelegt."
+ ],
+ "Amount": [
+ "Betrag"
+ ],
+ "Taxes can be in currencies that differ from the main currency used by the merchant.": [
+ "Steuern können in einer anderen Währung sein als die Hauptwährung, welche für Verkäufe normalerweise verwendet wird."
+ ],
+ "Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.": [
+ "Geben Sie Währung und Betrag mit einem Doppelpunkt getrennt ein, z.B. &quot;EUR:2,3&quot;."
+ ],
+ "Legal name of the tax, e.g. VAT or import duties.": [
+ "Offizielle Bezeichnung der Steuer, z.B. Mehrwertsteuer oder Einfuhrsteuer."
+ ],
+ "Add tax to the tax list": [
+ "Steuersatz zur Liste der Steuern hinzufügen"
+ ],
+ "Describe and add a product that is not in the inventory list": [
+ "Bisher nicht inventarisierte Artikel beschreiben und hinzufügen"
+ ],
+ "Add custom product": [
+ "Individuellen Artikel hinzufügen"
+ ],
+ "Complete information of the product": [
+ "Informationen zum Artikel vervollständigen"
+ ],
+ "Must be a number": [
+ "Dieser Wert muss eine Nummer sein"
+ ],
+ "Must be grater than 0": [
+ "Dieser Wert muss größer als Null sein"
+ ],
+ "Image": [
+ "Bild"
+ ],
+ "Photo of the product.": [
+ "Abbildung des Artikels."
+ ],
+ "Full product description.": [
+ "Vollständige Artikelbeschreibung."
+ ],
+ "Unit": [
+ "Einheit"
+ ],
+ "Name of the product unit.": [
+ "Artikelname (Bezeichnung einer Einheit)."
+ ],
+ "Price": [
+ "Preis"
+ ],
+ "Amount in the current currency.": [
+ "Betrag in der aktuellen Währung."
+ ],
+ "How many products will be added.": [
+ "Wie viele Artikel hinzugefügt werden."
+ ],
+ "Taxes": [
+ "Steuern"
+ ],
+ "Unit price": [
+ "Preis einer Einheit"
+ ],
+ "Total price": [
+ "Gesamtpreis"
+ ],
+ "Must be greater than 0": [
+ "Dieser Wert muss größer als Null sein"
+ ],
+ "Refund deadline can't be before pay deadline": [
+ "Die Rückerstattungsfrist kann nicht vor der Zahlungsfrist liegen"
+ ],
+ "Wire transfer deadline can't be before refund deadline": [
+ "Der Zeitraum der Überweisung kann nicht vor Ablauf der Rückerstattungsfrist enden"
+ ],
+ "Wire transfer deadline can't be before pay deadline": [
+ "Die Überweisungsfrist kann nicht vor der Zahlungsfrist liegen"
+ ],
+ "Must have a refund deadline": [
+ "Es sollte eine Rückerstattungsfrist geben"
+ ],
+ "Auto refund can't be after refund deadline": [
+ "Eine automatische Rückerstattung kann nicht nach der Rückerstattungsfrist erfolgen"
+ ],
+ "Must be in the future": [
+ "Dieser Wert sollte in der Zukunft liegen"
+ ],
+ "Simple": [
+ "Einfach"
+ ],
+ "Advanced": [
+ "Erweitert"
+ ],
+ "Manage products in order": [
+ "Artikel in der Bestellung verwalten"
+ ],
+ "%1$s products with a total price of %2$s.": [
+ "%1$s Artikel zu einer Gesamtsumme von %2$s."
+ ],
+ "Manage list of products in the order.": [
+ "Liste der Artikel in der Bestellung verwalten."
+ ],
+ "Remove this product from the order.": [
+ "Diesen Artikel aus der Bestellung entfernen."
+ ],
+ "Total product price added up": [
+ "Gesamtpreis des Artikels hinzugerechnet"
+ ],
+ "Amount to be paid by the customer": [
+ "Vom Kunden zu zahlender Betrag"
+ ],
+ "Order price": [
+ "Bestellsumme"
+ ],
+ "Final order price": [
+ "Endgültiger Bestellwert"
+ ],
+ "Summary": [
+ "Zusammenfassung"
+ ],
+ "Title of the order to be shown to the customer": [
+ "Bezeichnung der Bestellung, die den Kunden angezeigt wird"
+ ],
+ "Shipping and Fulfillment": [
+ "Versand und Lieferung"
+ ],
+ "Delivery date": [
+ "Lieferdatum"
+ ],
+ "Deadline for physical delivery assured by the merchant.": [
+ "Vom Händler zugesicherte Zustellfrist."
+ ],
+ "Location": [
+ "Lieferadresse"
+ ],
+ "Address where the products will be delivered": [
+ "Zustelladresse der Artikel"
+ ],
+ "Fulfillment URL": [
+ "Adresse digitaler Dienstleistung (Fulfillment-URL)"
+ ],
+ "URL to which the user will be redirected after successful payment.": [
+ "URL der von Kunden zu besuchenden Adresse nach erfolgter Bezahlung."
+ ],
+ "Taler payment options": [
+ "Taler-Zahlungsoptionen"
+ ],
+ "Override default Taler payment settings for this order": [
+ "Überschreibe die vorgegebenen Zahlungseinstellungen im Taler-System für diese Bestellung"
+ ],
+ "Payment time": [
+ "Zahlungsdatum"
+ ],
+ "Time for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline. Time start to run after the order is created.": [
+ "Zeitdauer, die Käufer haben, um das Angebot zu bezahlen, bevor es verfällt. Inventarisierte Artikel für das Angebot werden bis zum Fristablauf reserviert. Die Zeitdauer beginnt mit der Erstellzeit der Bestellungen."
+ ],
+ "Default": [
+ "Standardeinstellung"
+ ],
+ "Refund time": [
+ "Rückerstattungsdatum"
+ ],
+ "Time while the order can be refunded by the merchant. Time starts after the order is created.": [
+ "Zeitdauer, in der die Bestellung vom Verkäufer erstattet werden kann. Die Zeitdauer beginnt mit der Erstellzeit der Bestellungen."
+ ],
+ "Wire transfer time": [
+ "Zeitdauer der Überweisungen"
+ ],
+ "Time for the exchange to make the wire transfer. Time starts after the order is created.": [
+ "Zeitdauer, in welcher der Zahlungsdienstleister Überweisungen ausführt. Die Zeitdauer beginnt mit der Erstellzeit der Bestellungen."
+ ],
+ "Auto-refund time": [
+ "Zeitdauer für automatische Rückerstattungen"
+ ],
+ "Time until which the wallet will automatically check for refunds without user interaction.": [
+ "Zeit, bis zu der das Wallet automatisch und ohne Benutzerinteraktion auf Rückerstattungen prüft."
+ ],
+ "Maximum fee": [
+ "Maximale Gebührenhöhe"
+ ],
+ "Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [
+ "Die maximale Gebührenhöhe, die ein Verkäufer für eine Bestellung zu übernehmen gewillt ist. Einlösegebühren, die über dieser liegen, sind komplett von den Käufern zu übernehmen."
+ ],
+ "Create token": [
+ "Token erzeugen"
+ ],
+ "If the order ID is easy to guess the token will prevent user to steal orders from others.": [
+ "Wenn die ID der Bestellung leicht zu erraten ist, verhindert der Token, dass Benutzer Bestellungen von anderen „stehlen“ können."
+ ],
+ "Minimum age required": [
+ "Mindestalter erforderlich"
+ ],
+ "Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products": [
+ "Eine Zahl größer als 0 schränkt ein, welches e-Geld zur Bezahlung dieses Kaufvertrags verwendet werden kann. Bleibt das Feld leer, werden Altersbeschränkungen durch die Artikel selbst festgelegt"
+ ],
+ "Min age defined by the producs is %1$s": [
+ "Das Mindestalter für diesen Artikel ist %1$s"
+ ],
+ "No product with age restriction in this order": [
+ "Es befindet sich kein Artikel mit einer Altersbeschränkung in dieser Bestellung"
+ ],
+ "Additional information": [
+ "Zusätzliche Informationen"
+ ],
+ "Custom information to be included in the contract for this order.": [
+ "Individuelle Informationen, die in den Kaufvertrag für diese Bestellung aufgenommen werden sollen."
+ ],
+ "You must enter a value in JavaScript Object Notation (JSON).": [
+ "Sie müssen einen Wert im Format JavaScript Object Notation (JSON) eingeben."
+ ],
+ "Custom field name": [
+ "Benutzerdefinierter Feldname"
+ ],
+ "Disabled": [
+ "Deaktiviert"
+ ],
+ "No deadline": [
+ "Keine Zahlungsfrist"
+ ],
+ "Deadline at %1$s": [
+ "Frist bis %1$s"
+ ],
+ "Could not create order": [
+ "Es war nicht möglich, eine Bestellung zu erstellen"
+ ],
+ "No exchange would accept a payment because of KYC requirements.": [
+ "Aufgrund vorgegebener KYC-Erfordernisse würde kein Zahlungsdienstleister eine Zahlung annehmen."
+ ],
+ "No more stock for product with id \"%1$s\".": [
+ "Es gibt keinen Bestand für den Artikel mit der ID \"%1$s\"."
+ ],
+ "Orders": [
+ "Bestellungen"
+ ],
+ "Create order": [
+ "Bestellung anlegen"
+ ],
+ "Load first page": [
""
],
- "Reserves not yet funded": [
+ "Date": [
+ "Datum"
+ ],
+ "Refund": [
+ "Rückerstattung"
+ ],
+ "copy url": [
+ "URL kopieren"
+ ],
+ "Load more orders after the last one": [
""
],
- "Reserves ready": [
+ "Load next page": [
""
],
- "add new reserve": [
+ "No orders have been found matching your query!": [
+ "Es wurden keine Bestellungen gefunden, die zu Ihrer Abfrage passen!"
+ ],
+ "Duplicated": [
""
],
- "Expires at": [
+ "This value exceed the refundable amount": [
""
],
- "Initial": [
+ "Amount to be refunded": [
""
],
- "delete selected reserve from the database": [
+ "Max refundable:": [
+ "Maximale Rückerstattung:"
+ ],
+ "Requested by the customer": [
+ "Von Käufern angefordert"
+ ],
+ "Other": [
""
],
- "authorize new tip from selected reserve": [
+ "Why this order is being refunded": [
""
],
- "There is no ready reserves yet, add more pressing the + sign or fund them": [
+ "More information to give context": [
""
],
- "Expected Balance": [
+ "Contract Terms": [
+ "Vertragsbedingungen"
+ ],
+ "Human-readable description of the whole purchase": [
""
],
- "could not create the tip": [
+ "Total price for the transaction": [
""
],
- "should not be empty": [
+ "URL for this purchase": [
+ "URL für diesen Kauf"
+ ],
+ "Max fee": [
+ "Höchster Gebührenbetrag"
+ ],
+ "Maximum total deposit fee accepted by the merchant for this contract": [
""
],
- "should be greater that 0": [
+ "Created at": [
+ "Erstellungsdatum"
+ ],
+ "Time when this contract was generated": [
""
],
- "can't be empty": [
+ "Refund deadline": [
+ "Rückerstattungsfrist"
+ ],
+ "After this deadline has passed no refunds will be accepted": [
""
],
- "to short": [
+ "Payment deadline": [
+ "Zahlungsfrist"
+ ],
+ "After this deadline, the merchant won't accept payments for the contract": [
""
],
- "just letters and numbers from 2 to 7": [
+ "Wire transfer deadline": [
+ "Überweisungsfrist"
+ ],
+ "Transfer deadline for the exchange": [
+ "Frist der Überweisung vom Zahlungsdienstleister an das Bankkonto"
+ ],
+ "Time indicating when the order should be delivered": [
""
],
- "size of the key should be 32": [
+ "Where the order will be delivered": [
+ "Zustelladresse der Bestellung"
+ ],
+ "Auto-refund delay": [
""
],
- "Identifier": [
+ "How long the wallet should try to get an automatic refund for the purchase": [
""
],
- "Name of the template in URLs.": [
+ "Extra info": [
+ "Weitere Informationen"
+ ],
+ "Extra data that is only interpreted by the merchant frontend": [
""
],
- "Describe what this template stands for": [
+ "Order": [
+ "Bestellung"
+ ],
+ "Claimed": [
""
],
- "Fixed summary": [
+ "Claimed at": [
""
],
- "If specified, this template will create order with the same summary": [
+ "Timeline": [
+ "Zeitleiste"
+ ],
+ "Payment details": [
+ "Zahlungsdetails"
+ ],
+ "Order status": [
+ "Bestellstatus"
+ ],
+ "Product list": [
+ "Artikelliste"
+ ],
+ "Paid": [
+ "Bezahlt"
+ ],
+ "Wired": [
+ "Überwiesen"
+ ],
+ "Refunded": [
+ "Rückerstattet"
+ ],
+ "Refund order": [
+ "Bestellung rückerstatten"
+ ],
+ "Not refundable": [
""
],
- "Fixed price": [
+ "Next event in": [
""
],
- "If specified, this template will create order with the same price": [
+ "Refunded amount": [
+ "Rückerstattungsbetrag"
+ ],
+ "Refund taken": [
+ "Erhaltener Rückerstattungsbetrag"
+ ],
+ "Status URL": [
+ "Status-URL"
+ ],
+ "Refund URI": [
+ "Rückerstattungs-URI"
+ ],
+ "Unpaid": [
""
],
- "Minimum age": [
+ "Pay at": [
""
],
- "Is this contract restricted to some age?": [
+ "Order status URL": [
+ "Bestellstatus-URL"
+ ],
+ "Payment URI": [
+ "Zahlungs-URI"
+ ],
+ "Unknown order status. This is an error, please contact the administrator.": [
+ "Unbekannter Bestellstatus. Dies ist ein Fehler, bitte kontaktieren Sie den Administrator."
+ ],
+ "Back": [
+ "Zurück"
+ ],
+ "Refund created successfully": [
""
],
- "Payment timeout": [
+ "Could not create the refund": [
""
],
- "How much time has the customer to complete the payment once the order was created.": [
+ "There are pending KYC requirements.": [
""
],
- "Verification algorithm": [
+ "Missing id": [
+ ""
+ ],
+ "Not found": [
+ ""
+ ],
+ "Select date to show nearby orders": [
+ ""
+ ],
+ "Only show paid orders": [
+ ""
+ ],
+ "New": [
+ "Neu"
+ ],
+ "Only show orders with refunds": [
+ ""
+ ],
+ "Only show orders where customers paid, but wire payments from payment provider are still pending": [
+ ""
+ ],
+ "Not wired": [
+ "Nicht überwiesen"
+ ],
+ "Completed": [
+ ""
+ ],
+ "Remove all filters": [
+ ""
+ ],
+ "Clear date filter": [
+ ""
+ ],
+ "Jump to date (%1$s)": [
+ ""
+ ],
+ "Jump to order with the given product ID": [
+ ""
+ ],
+ "Order id": [
+ "Bestellnummer"
+ ],
+ "Invalid. Only characters and numbers": [
+ ""
+ ],
+ "Just letters and numbers from 2 to 7": [
""
],
+ "Size of the key must be 32": [
+ ""
+ ],
+ "Internal id on the system": [
+ ""
+ ],
+ "Useful to identify the device physically": [
+ ""
+ ],
+ "Verification algorithm": [
+ "Überprüfungsalgorithmus"
+ ],
"Algorithm to use to verify transaction in offline mode": [
+ "Algorithmus für das Überprüfen von Transaktionen im Offline-Modus"
+ ],
+ "Device key": [
""
],
- "Point-of-sale key": [
+ "Be sure to be very hard to guess or use the random generator": [
""
],
- "Useful to validate the purchase": [
+ "Your device need to have exactly the same value": [
""
],
- "generate random secret key": [
+ "Generate random secret key": [
""
],
- "random": [
+ "Random": [
""
],
- "show secret key": [
+ "You can scan the next QR code with your device or save the key before continuing.": [
""
],
- "hide secret key": [
+ "Device added successfully": [
""
],
- "hide": [
+ "Could not add device": [
""
],
- "show": [
+ "OTP Devices": [
""
],
- "could not inform template": [
+ "Add new devices": [
+ "Neue Geräte hinzufügen"
+ ],
+ "Load more devices before the first one": [
""
],
- "Amount is required": [
+ "Delete selected devices from the database": [
""
],
- "Order summary is required": [
+ "Load more devices after the last one": [
""
],
- "New order for template": [
+ "There is no devices yet, add more pressing the + sign": [
""
],
- "Amount of the order": [
+ "Device delete successfully": [
""
],
- "Order summary": [
+ "Could not delete the device": [
""
],
- "could not create order from template": [
+ "Device:": [
""
],
- "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [
+ "Not modified": [
""
],
- "Fixed amount": [
+ "Change key": [
""
],
- "Default amount": [
+ "Could not update template": [
""
],
- "Default summary": [
+ "Template id is unknown": [
""
],
- "Print": [
+ "The provided information is inconsistent with the current state of the template": [
""
],
- "Setup TOTP": [
+ "Click here to configure the stock of the product, leave it as is and the backend will not control stock.": [
""
],
- "Templates": [
+ "Manage stock": [
+ "Bestand verwalten"
+ ],
+ "This product has been configured without stock control": [
""
],
- "add new templates": [
+ "Infinite": [
+ "Unbegrenzt"
+ ],
+ "Lost can't be greater than current and incoming (max %1$s)": [
""
],
- "load more templates before the first one": [
+ "Incoming": [
+ "In der Zulieferung"
+ ],
+ "Lost": [
+ "Schwund (Inventurdifferenz)"
+ ],
+ "Current": [
+ "Aktuell"
+ ],
+ "Remove stock control for this product": [
""
],
- "load newer templates": [
+ "without stock": [
+ "ohne Bestand"
+ ],
+ "Next restock": [
+ "Nächstes Auffüllen des Bestands"
+ ],
+ "Warehouse address": [
""
],
- "delete selected templates from the database": [
+ "Add element to the list": [
""
],
- "use template to create new order": [
+ "Invalid amount": [
+ "Kein gültiger Betrag"
+ ],
+ "Product identification to use in URLs (for internal use only).": [
""
],
- "create qr code for the template": [
+ "Illustration of the product for customers.": [
""
],
- "load more templates after the last one": [
+ "Product description for customers.": [
+ "Artikelbeschreibung, die Kunden zu sehen bekommen."
+ ],
+ "Age restriction": [
""
],
- "load older templates": [
+ "Is this product restricted for customer below certain age?": [
""
],
- "There is no templates yet, add more pressing the + sign": [
+ "Minimum age of the customer": [
+ "Mindestalter von Käufern"
+ ],
+ "Unit name": [
+ "Bezeichnung der Mengeneinheit"
+ ],
+ "Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers.": [
+ "Die den Käufern angezeigte Mengeneinheit des Artikels im Verkauf (z.B. 2 Kilogramm, 5 Liter, 3 Stück, 5 Meter)."
+ ],
+ "Example: kg, items or liters": [
+ "Beispiel: kg, Stück oder Liter"
+ ],
+ "Price per unit": [
+ "Preis pro Mengeneinheit"
+ ],
+ "Sale price for customers, including taxes, for above units of the product.": [
+ "Verkaufspreis an Endkunden, inklusive Steuern, für jede oben genannte Mengeneinheit des Artikels."
+ ],
+ "Stock": [
+ "Bestand"
+ ],
+ "Inventory for products with finite supply (for internal use only).": [
""
],
- "template delete successfully": [
+ "Taxes included in the product price, exposed to customers.": [
""
],
- "could not delete the template": [
+ "Categories": [
""
],
- "could not update template": [
+ "Search by category description or id": [
""
],
- "should be one of '%1$s'": [
+ "Categories where this product will be listed on.": [
+ "Kategorien, in denen dieser Artikel aufgeführt sein wird."
+ ],
+ "Product created successfully": [
""
],
- "Webhook ID to use": [
+ "Could not create product": [
""
],
- "Event": [
+ "Inventory": [
""
],
- "The event of the webhook: why the webhook is used": [
+ "Add product to inventory": [
""
],
- "Method": [
+ "Sales": [
""
],
- "Method used by the webhook": [
+ "Sold": [
+ "Verkauft"
+ ],
+ "Free": [
""
],
- "URL": [
+ "Go to product update page": [
""
],
- "URL of the webhook where the customer will be redirected": [
+ "Update": [
+ "Aktualisieren"
+ ],
+ "Remove this product from the database": [
+ "Diesen Artikel aus der Datenbank entfernen"
+ ],
+ "Load more products after the last one": [
""
],
- "Header": [
+ "Update the product with new price": [
""
],
- "Header template of the webhook": [
+ "Update product with new price": [
+ "Artikelpreis aktualisieren"
+ ],
+ "Confirm update": [
+ "Aktualisierung bestätigen"
+ ],
+ "Add more elements to the inventory": [
""
],
- "Body": [
+ "Report elements lost in the inventory": [
""
],
- "Body template by the webhook": [
+ "New price for the product": [
""
],
- "Webhooks": [
+ "The are value with errors": [
""
],
- "add new webhooks": [
+ "Update product with new stock and price": [
""
],
- "load more webhooks before the first one": [
+ "There is no products yet, add more pressing the + sign": [
+ "Es gibt noch keine Artikel. Erstellen Sie diese durch Druck auf das +-Zeichen"
+ ],
+ "Jump to product with the given product ID": [
""
],
- "load newer webhooks": [
+ "Product id": [
+ "Artikel-ID"
+ ],
+ "Product updated successfully": [
""
],
- "Event type": [
+ "Could not update the product": [
""
],
- "delete selected webhook from the database": [
+ "Product \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "load more webhooks after the last one": [
+ "Could not delete the product": [
""
],
- "load older webhooks": [
+ "If you delete the product named %1$s (ID: %2$s ), the stock and related information will be lost": [
""
],
- "There is no webhooks yet, add more pressing the + sign": [
+ "Deleting an product can't be undone.": [
""
],
- "webhook delete successfully": [
+ "Product id:": [
+ "Artikel-ID:"
+ ],
+ "Product (ID: %1$s) has been updated": [
+ "Der Artikel (ID: %1$s) wurde aktualisiert"
+ ],
+ "Could not update product": [
+ "Der Artikel konnte nicht aktualisiert werden"
+ ],
+ "Invalid. only characters and numbers": [
+ "Ungültig. Nur Buchstaben und Zahlen"
+ ],
+ "Must be greater that 0": [
+ "Dieser Wert muss größer als Null sein"
+ ],
+ "To short": [
+ "Zu kurz"
+ ],
+ "Identifier": [
+ "Eindeutige Kennung"
+ ],
+ "Name of the template in URLs.": [
+ "Name der Vorlage in URLs."
+ ],
+ "Describe what this template stands for": [
+ "Beschreiben Sie, wofür diese Vorlage stehen soll"
+ ],
+ "If specified, this template will create order with the same summary": [
+ "Falls angegeben, wird diese Vorlage Bestellungen mit der gleichen Zusammenfassung erzeugen"
+ ],
+ "Summary is editable": [
""
],
- "could not delete the webhook": [
+ "Allow the user to change the summary.": [
""
],
- "check the id, does not look valid": [
+ "If specified, this template will create order with the same price": [
+ "Falls angegeben, wird diese Vorlage Bestellungen mit dem gleichen Preis erzeugen"
+ ],
+ "Amount is editable": [
""
],
- "should have 52 characters, current %1$s": [
+ "Allow the user to select the amount to pay.": [
""
],
- "URL doesn't have the right format": [
+ "Currency is editable": [
""
],
- "Credited bank account": [
+ "Allow the user to change currency.": [
""
],
- "Select one account": [
+ "Supported currencies": [
""
],
- "Bank account of the merchant where the payment was received": [
+ "Supported currencies: %1$s": [
""
],
- "Wire transfer ID": [
+ "Minimum age": [
+ "Mindestalter"
+ ],
+ "Is this contract restricted to some age?": [
+ "Verlangt dieser Kaufvertrag ein bestimmtes Mindestalter?"
+ ],
+ "Payment timeout": [
+ "Die Zahlungsfrist ist verstrichen"
+ ],
+ "How much time has the customer to complete the payment once the order was created.": [
+ "Dies bestimmt die Zeitdauer zur Bezahlung nach einer erfolgten Bestellung."
+ ],
+ "OTP device": [
""
],
- "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
+ "Use to verify transaction while offline.": [
""
],
- "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
+ "No OTP device.": [
""
],
- "Amount credited": [
+ "Add one first": [
""
],
- "Actual amount that was wired to the merchant's bank account": [
+ "No device": [
""
],
- "could not inform transfer": [
+ "Use to verify transaction in offline mode.": [
""
],
- "Transfers": [
+ "Template has been created": [
""
],
- "add new transfer": [
+ "Could not create template": [
""
],
- "load more transfers before the first one": [
+ "Templates": [
+ "Vorlagen"
+ ],
+ "Add new templates": [
+ "Neue Vorlagen hinzufügen"
+ ],
+ "Load more templates before the first one": [
""
],
- "load newer transfers": [
+ "Delete selected templates from the database": [
""
],
- "Credit": [
+ "Use template to create new order": [
""
],
- "Confirmed": [
+ "Use template": [
""
],
- "Verified": [
+ "Create qr code for the template": [
""
],
- "Executed at": [
+ "Load more templates after the last one": [
""
],
- "yes": [
+ "There is no templates yet, add more pressing the + sign": [
+ "Es gibt noch keine Vorlagen. Erstellen Sie diese durch Druck auf das +-Zeichen"
+ ],
+ "Jump to template with the given template ID": [
""
],
- "no": [
+ "Template identification": [
""
],
- "unknown": [
+ "Template \"%1$s\" (ID: %2$s) has been deleted": [
""
],
- "delete selected transfer from the database": [
+ "Failed to delete template": [
""
],
- "load more transfer after the last one": [
+ "If you delete the template %1$s (ID: %2$s) you may loose information": [
""
],
- "load older transfers": [
+ "Deleting an template": [
""
],
- "There is no transfer yet, add more pressing the + sign": [
+ "can't be undone": [
+ "Das kann nicht rückgängig gemacht werden"
+ ],
+ "Print": [
+ "Drucken"
+ ],
+ "Too short": [
""
],
- "filter by account address": [
+ "Template (ID: %1$s) has been updated": [
+ "Die Vorlage (ID: %1$s) wurde aktualisiert"
+ ],
+ "Amount is required": [
+ "Ein Betrag ist erforderlich"
+ ],
+ "Order summary is required": [
+ "Eine Zusammenfassung der Bestellung ist erforderlich"
+ ],
+ "New order for template": [
+ "Neue Bestellung von Vorlage"
+ ],
+ "Amount of the order": [
+ "Summe der Bestellung"
+ ],
+ "Order summary": [
+ "Zusammenfassung der Bestellung"
+ ],
+ "Could not create order from template": [
""
],
- "only show wire transfers confirmed by the merchant": [
+ "You need your access token to perform the operation": [
+ "Sie benötigen Ihren Zugangstoken, um den Vorgang durchzuführen"
+ ],
+ "You are updating the access token from instance with id \"%1$s\"": [
+ "Sie erneuern Ihren Zugangstoken für die Instanz mit der ID \"%1$s\""
+ ],
+ "This instance doesn't have authentication token.": [
""
],
- "only show wire transfers claimed by the exchange": [
+ "You can leave it empty if there is another layer of security.": [
""
],
- "Unverified": [
+ "Current access token": [
+ "Derzeitiger Zugangstoken"
+ ],
+ "Clearing the access token will mean public access to the instance.": [
""
],
- "is not valid": [
+ "Clear token": [
+ "Zugangstoken löschen"
+ ],
+ "Confirm change": [
+ "Änderung bestätigen"
+ ],
+ "Failed to clear token": [
+ "Es war nicht möglich, den/die Token zu löschen"
+ ],
+ "Failed to set new token": [
+ "Es war nicht möglich, einen neuen Zugangstoken festzuschreiben"
+ ],
+ "Slug": [
+ "Slug (benutzer- und suchmaschinenfreundlicher Text als Bestandteil einer URL)"
+ ],
+ "Token family slug to use in URLs (for internal use only)": [
+ "Slug der Token-Familie zur Benutzung in URLs (nur für interne Zwecke)"
+ ],
+ "Kind": [
""
],
- "is not a number": [
+ "Token family kind": [
""
],
- "must be 1 or greater": [
+ "User-readable token family name": [
""
],
- "max 7 lines": [
+ "Token family description for customers": [
""
],
- "change authorization configuration": [
+ "Valid After": [
""
],
- "Need to complete marked fields and choose authorization method": [
+ "Token family can issue tokens after this date": [
""
],
- "This is not a valid bitcoin address.": [
+ "Valid Before": [
""
],
- "This is not a valid Ethereum address.": [
+ "Token family can issue tokens until this date": [
""
],
- "IBAN numbers usually have more that 4 digits": [
+ "Duration": [
""
],
- "IBAN numbers usually have less that 34 digits": [
+ "Validity duration of a issued token": [
""
],
- "IBAN country code not found": [
+ "Token familty created successfully": [
""
],
- "IBAN number is not valid, checksum is wrong": [
+ "Could not create token family": [
""
],
- "Target type": [
+ "Token Families": [
""
],
- "Method to use for wire transfer": [
+ "Add token family": [
""
],
- "Routing": [
+ "Go to token family update page": [
""
],
- "Routing number.": [
+ "Remove this token family from the database": [
+ "Diese Token aus der Datenbank entfernen"
+ ],
+ "There are no token families yet, add the first one by pressing the + sign.": [
""
],
- "Account": [
+ "Token family updated successfully": [
""
],
- "Account number.": [
+ "Could not update the token family": [
""
],
- "Business Identifier Code.": [
+ "Token family \"%1$s\" (SLUG: %2$s) has been deleted": [
""
],
- "Bank Account Number.": [
+ "Failed to delete token family": [
""
],
- "Unified Payment Interface.": [
+ "If you delete the %1$s token family (Slug: %2$s), all issued tokens will become invalid.": [
""
],
- "Bitcoin protocol.": [
+ "Deleting a token family %1$s .": [
""
],
- "Ethereum protocol.": [
+ "Token Family: %1$s": [
""
],
- "Interledger protocol.": [
+ "Token familty updated successfully": [
""
],
- "Host": [
+ "Could not update token family": [
""
],
- "Bank host.": [
+ "Check the id, does not look valid": [
""
],
- "Bank account.": [
+ "Must have 52 characters, current %1$s": [
""
],
- "Bank account owner's name.": [
+ "URL doesn't have the right format": [
+ "Die URL hat nicht das richtige Format"
+ ],
+ "Credited bank account": [
""
],
- "No accounts yet.": [
+ "Select one account": [
+ "Wählen Sie ein Konto"
+ ],
+ "Bank account of the merchant where the payment was received": [
+ "Bankkonto des Händlers mit Zahlungseingang"
+ ],
+ "Wire transfer ID": [
+ "Überweisungs-ID"
+ ],
+ "Unique identifier of the wire transfer used by the exchange, must be 52 characters long": [
""
],
- "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Exchange URL": [
+ "URL des Zahlungsdienstleisters (Exchange-URL)"
+ ],
+ "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [
+ "Base URL des Zahlungsdienstleisters, der die Überweisung getätigt hat - diese sollte im Buchungsvermerk der Überweisung stehen"
+ ],
+ "Amount credited": [
+ "Gutgeschriebener Betrag"
+ ],
+ "Actual amount that was wired to the merchant's bank account": [
+ "Tatsächlicher Betrag, der auf das Bankkonto des Verkäufers überwiesen wurde"
+ ],
+ "Wire transfer informed successfully": [
""
],
- "Business name": [
+ "Could not inform transfer": [
""
],
- "Legal name of the business represented by this instance.": [
+ "Transfers": [
""
],
- "Email": [
+ "Add new transfer": [
+ "Neuen Transfer hinzufügen"
+ ],
+ "Load more transfers before the first one": [
""
],
- "Contact email": [
+ "Credit": [
""
],
- "Website URL": [
+ "Confirmed": [
+ "Bestätigt"
+ ],
+ "Verified": [
+ "Verifiziert"
+ ],
+ "Executed at": [
+ "Ausführungsdatum"
+ ],
+ "yes": [
+ "ja"
+ ],
+ "no": [
+ "nein"
+ ],
+ "never": [
+ "nie"
+ ],
+ "unknown": [
+ "unbekannt"
+ ],
+ "Delete selected transfer from the database": [
""
],
- "URL.": [
+ "Load more transfers after the last one": [
""
],
- "Logo": [
+ "There is no transfer yet, add more pressing the + sign": [
""
],
- "Logo image.": [
+ "All accounts": [
""
],
- "Bank account": [
+ "Filter by account address": [
""
],
- "URI specifying bank account for crediting revenue.": [
+ "Only show wire transfers confirmed by the merchant": [
""
],
- "Default max deposit fee": [
+ "Only show wire transfers claimed by the exchange": [
""
],
- "Maximum deposit fees this merchant is willing to pay per order by default.": [
+ "Unverified": [
+ "Nicht verifiziert"
+ ],
+ "Wire transfer \"%1$s...\" has been deleted": [
""
],
- "Default max wire fee": [
+ "Failed to delete transfer": [
""
],
- "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [
+ "Must be business or individual": [
""
],
- "Default wire fee amortization": [
+ "Pay delay can't be greater than wire transfer delay": [
""
],
- "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [
+ "Max 7 lines": [
""
],
- "Physical location of the merchant.": [
+ "Doesn't match": [
""
],
- "Jurisdiction": [
+ "Enable access control": [
+ ""
+ ],
+ "Choose if the backend server should authenticate access.": [
""
],
+ "Access control is not yet decided. This instance can't be created.": [
+ ""
+ ],
+ "Authorization must be handled externally.": [
+ ""
+ ],
+ "Authorization is handled by the backend server.": [
+ ""
+ ],
+ "Need to complete marked fields and choose authorization method": [
+ "Die gekennzeichneten Felder müssen ausgefüllt und eine Methode der Berechtigungsprüfung gewählt sein"
+ ],
+ "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [
+ "Name der Instanz in den URLs. Die Instanz „default“ ist reserviert, weil sie zum Verwalten der anderen Instanzen genutzt wird."
+ ],
+ "Business name": [
+ "Name (von Geschäft, Firma oder Verkaufsort)"
+ ],
+ "Legal name of the business represented by this instance.": [
+ "Offizieller Handelsname (des Geschäfts, der Firma oder des Verkaufsorts), welchen diese Instanz repräsentieren soll."
+ ],
+ "Email": [
+ "E-Mail"
+ ],
+ "Contact email": [
+ "E-Mail-Adresse für allgemeinen Kontakt"
+ ],
+ "Website URL": [
+ "Webseiten-URL"
+ ],
+ "URL.": [
+ "URL."
+ ],
+ "Logo": [
+ "Logo (Signet)"
+ ],
+ "Logo image.": [
+ "Abbildung des Firmenlogos."
+ ],
+ "Physical location of the merchant.": [
+ "Niederlassung (Firmensitz) des Händlers oder Verkäufers."
+ ],
+ "Jurisdiction": [
+ "Gerichtsstand"
+ ],
"Jurisdiction for legal disputes with the merchant.": [
+ "Gerichtsstand für rechtliche Auseinandersetzungen mit dem Händler oder Verkäufer."
+ ],
+ "Pay transaction fee": [
""
],
- "Default payment delay": [
+ "Assume the cost of the transaction of let the user pay for it.": [
""
],
+ "Default payment delay": [
+ "Normale Zahlungsfrist"
+ ],
"Time customers have to pay an order before the offer expires by default.": [
- ""
+ "Zeitraum, in dem Käufer normalerweise bezahlen, bevor das Angebot regulär verfällt."
],
"Default wire transfer delay": [
- ""
+ "Gewöhnlicher Aufschub für Überweisungen"
],
"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.": [
- ""
+ "Zeitraum, in dem alle Kundenzahlungen zu einem Betrag zusammengefasst und vom Zahlungsdienstleister an das Bankkonto des Verkäufers überwiesen werden, um die Überweisungsgebühren zu reduzieren."
],
"Instance id": [
+ "Instanz-ID"
+ ],
+ "Failed to update instance": [
+ "Es konnte die Instanz nicht aktualisiert werden"
+ ],
+ "Must be \"pay\" or \"refund\"": [
""
],
- "Change the authorization method use for this instance.": [
+ "Must be one of '%1$s'": [
""
],
- "Manage access token": [
+ "Webhook ID to use": [
+ "zu verwendende Webhook-ID"
+ ],
+ "Event": [
+ "Event"
+ ],
+ "Pay": [
""
],
- "Failed to create instance": [
+ "The event of the webhook: why the webhook is used": [
+ "Event (Anlass, Bedingung) für einen Webhook, um durch diesen nachfolgende Prozesse auszulösen"
+ ],
+ "Method": [
+ "Methode"
+ ],
+ "GET": [
""
],
- "Login required": [
+ "POST": [
""
],
- "Please enter your access token.": [
+ "PUT": [
""
],
- "Access Token": [
+ "PATCH": [
""
],
- "The request to the backend take too long and was cancelled": [
+ "HEAD": [
""
],
- "Diagnostic from %1$s is \"%2$s\"": [
+ "Method used by the webhook": [
+ "Methode, die der Webhook verwendet"
+ ],
+ "URL": [
+ "URL"
+ ],
+ "URL of the webhook where the customer will be redirected": [
+ "URL des Webhooks, zu der die Käufer nach der Bezahlung weitergeleitet werden"
+ ],
+ "The text below support %1$s template engine. Any string between %2$s and %3$s will be replaced with replaced with the value of the corresponding variable.": [
""
],
- "The backend reported a problem: HTTP status #%1$s": [
+ "For example %1$s will be replaced with the the order's price": [
""
],
- "Diagnostic from %1$s is '%2$s'": [
+ "The short list of variables are:": [
""
],
- "Access denied": [
+ "order's description": [
""
],
- "The access token provided is invalid.": [
+ "order's price": [
+ "Kosten der Bestellung"
+ ],
+ "order's unique identification": [
""
],
- "No 'default' instance configured yet.": [
+ "the amount that was being refunded": [
""
],
- "Create a 'default' instance to begin using the merchant backoffice.": [
+ "the reason entered by the merchant staff for granting the refund": [
""
],
- "The access token provided is invalid": [
+ "time of the refund in nanoseconds since 1970": [
""
],
- "Hide for today": [
+ "Http body": [
""
],
- "Instance": [
+ "Body template by the webhook": [
+ "Vorlage für den Webhook-Body"
+ ],
+ "Webhook create successfully": [
""
],
- "Settings": [
+ "Could not create the webhook": [
""
],
- "Connection": [
+ "Could not create webhook": [
""
],
- "New": [
+ "Webhooks": [
+ "Webhooks"
+ ],
+ "Add new webhooks": [
""
],
- "List": [
+ "Load more webhooks before the first one": [
""
],
- "Log out": [
+ "Event type": [
+ "Event-Typ"
+ ],
+ "Delete selected webhook from the database": [
""
],
- "Check your token is valid": [
+ "Load more webhooks after the last one": [
+ ""
+ ],
+ "There is no webhooks yet, add more pressing the + sign": [
+ "Es gibt noch keinen Webhook. Erstellen Sie Webhooks durch Druck auf das +-Zeichen"
+ ],
+ "Webhook delete successfully": [
""
],
- "Couldn't access the server.": [
+ "Could not delete the webhook": [
""
],
- "Could not infer instance id from url %1$s": [
+ "Header": [
+ "Header"
+ ],
+ "Header template of the webhook": [
+ "Vorlage für den Webhook-Header"
+ ],
+ "Body": [
+ "Body"
+ ],
+ "Webhook updated": [
""
],
- "Server not found": [
+ "Could not update webhook": [
""
],
- "Server response with an error code": [
+ "Language": [
""
],
- "Got message %1$s from %2$s": [
+ "Advance order creation": [
""
],
- "Response from server is unreadable, http status: %1$s": [
+ "Shows more options in the order creation form": [
""
],
- "Unexpected Error": [
+ "Advance instance settings": [
""
],
- "The value %1$s is invalid for a payment url": [
+ "Shows more options in the instance settings form": [
""
],
- "add element to the list": [
+ "Date format": [
""
],
- "add": [
+ "How the date is going to be displayed": [
""
],
- "Deleting": [
+ "Developer mode": [
""
],
+ "Shows more options and tools which are not intended for general audience.": [
+ ""
+ ],
+ "Total products": [
+ "Gesamte Artikelmenge"
+ ],
+ "Delete selected category from the database": [
+ ""
+ ],
+ "There is no categories yet, add more pressing the + sign": [
+ ""
+ ],
+ "Category delete successfully": [
+ ""
+ ],
+ "Could not delete the category": [
+ ""
+ ],
+ "Category name": [
+ ""
+ ],
+ "Category added successfully": [
+ ""
+ ],
+ "Could not add category": [
+ ""
+ ],
+ "Id:": [
+ ""
+ ],
+ "Name of the category": [
+ ""
+ ],
+ "Products": [
+ "Artikel"
+ ],
+ "Search by product description or id": [
+ ""
+ ],
+ "Products that this category will list.": [
+ ""
+ ],
+ "Could not update category": [
+ ""
+ ],
+ "Category id is unknown": [
+ ""
+ ],
+ "Without this the merchant backend will refuse to create new orders.": [
+ ""
+ ],
+ "Hide for today": [
+ "Für heute nicht anzeigen"
+ ],
+ "KYC verification needed": [
+ ""
+ ],
+ "Some transfer are on hold until a KYC process is completed. Go to the KYC section in the left panel for more information": [
+ ""
+ ],
+ "Configuration": [
+ "Einstellungen"
+ ],
+ "Settings": [
+ "Einstellungen"
+ ],
+ "Access token": [
+ "Zugangstoken"
+ ],
+ "Connection": [
+ "Verbindung"
+ ],
+ "Interface": [
+ ""
+ ],
+ "List": [
+ "Auflisten"
+ ],
+ "Log out": [
+ "Abmelden"
+ ],
+ "Failed to create instance": [
+ "Das Erzeugen der Instanz ist fehlgeschlagen"
+ ],
+ "checking compatibility with server...": [
+ ""
+ ],
+ "Contacting the server failed": [
+ ""
+ ],
+ "The server version is not supported": [
+ ""
+ ],
+ "Supported version \"%1$s\", server version \"%2$s\".": [
+ ""
+ ],
+ "Deleting": [
+ "löscht…"
+ ],
"Changing": [
+ "ändern…"
+ ],
+ "Manage access token": [
+ "Zugangstoken verwalten"
+ ],
+ "Business Name": [
""
],
"Order ID": [
- ""
+ "Nummer der Bestellung"
],
"Payment URL": [
- ""
+ "Zahlungs-URL (Payment URL)"
]
}
- }
+ },
+ "domain": "messages",
+ "plural_forms": "nplurals=2; plural=n != 1;",
+ "lang": "de",
+ "completeness": 63
};
diff --git a/packages/merchant-backoffice-ui/src/i18n/sv.po b/packages/merchant-backoffice-ui/src/i18n/sv.po
index d8d0bae29..1ca37acbf 100644
--- a/packages/merchant-backoffice-ui/src/i18n/sv.po
+++ b/packages/merchant-backoffice-ui/src/i18n/sv.po
@@ -12,169 +12,461 @@
# You should have received a copy of the GNU General Public License along with
# TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Taler Wallet\n"
"Report-Msgid-Bugs-To: taler@gnu.org\n"
"POT-Creation-Date: 2016-11-23 00:00+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
+"PO-Revision-Date: 2024-10-27 11:02+0000\n"
+"Last-Translator: Stefan Kügel <stefan.kuegel@taler.net>\n"
+"Language-Team: Swedish <https://weblate.taler.net/projects/gnu-taler/"
+"merchant-backoffice/sv/>\n"
+"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.5.5\n"
-#: src/components/modal/index.tsx:71
+#: src/components/ErrorLoadingMerchant.tsx:45
#, c-format
-msgid "Cancel"
+msgid "The request reached a timeout, check your connection."
msgstr ""
-#: src/components/modal/index.tsx:79
+#: src/components/ErrorLoadingMerchant.tsx:65
#, c-format
-msgid "%1$s"
+msgid "The request was cancelled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
msgstr ""
-#: src/components/modal/index.tsx:84
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr ""
+
+#: src/components/modal/index.tsx:81
+#, fuzzy, c-format
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: src/components/modal/index.tsx:89
+#, c-format
+msgid "%1$s"
+msgstr "%1$s"
+
+#: src/components/modal/index.tsx:94
#, c-format
msgid "Close"
msgstr ""
-#: src/components/modal/index.tsx:124
+#: src/components/modal/index.tsx:134
#, c-format
msgid "Continue"
msgstr ""
-#: src/components/modal/index.tsx:178
+#: src/components/modal/index.tsx:194
#, c-format
msgid "Clear"
msgstr ""
-#: src/components/modal/index.tsx:190
+#: src/components/modal/index.tsx:206
#, c-format
msgid "Confirm"
+msgstr "Bekräfta"
+
+#: src/components/modal/index.tsx:248
+#, c-format
+msgid "Required"
+msgstr "Obligatoriskt"
+
+#: src/components/modal/index.tsx:250
+#, c-format
+msgid "Letter must be a JSON string"
+msgstr ""
+
+#: src/components/modal/index.tsx:252
+#, c-format
+msgid "JSON string is invalid"
+msgstr ""
+
+#: src/components/modal/index.tsx:257
+#, c-format
+msgid "Import"
+msgstr ""
+
+#: src/components/modal/index.tsx:258
+#, c-format
+msgid "Importing an account from the bank"
+msgstr ""
+
+#: src/components/modal/index.tsx:265
+#, c-format
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
+msgstr ""
+
+#: src/components/modal/index.tsx:273
+#, c-format
+msgid "Account information"
+msgstr ""
+
+#: src/components/modal/index.tsx:338
+#, c-format
+msgid "Correct form"
+msgstr ""
+
+#: src/components/modal/index.tsx:339
+#, c-format
+msgid "Comparing account details"
+msgstr ""
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr ""
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr ""
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr ""
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr ""
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr ""
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr ""
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr ""
+
+#: src/components/modal/index.tsx:402
+#, c-format
+msgid "Account id"
+msgstr ""
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr ""
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr ""
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
+msgstr ""
+
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr ""
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr ""
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr ""
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
+msgstr ""
+
+#: src/components/modal/index.tsx:487
+#, c-format
+msgid "Step 1:"
+msgstr ""
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
+msgstr ""
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr ""
+
+#: src/components/modal/index.tsx:499
+#, c-format
+msgid "Step 2:"
+msgstr ""
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
+msgstr ""
+
+#: src/components/modal/index.tsx:509
+#, c-format
+msgid "Receiver name"
msgstr ""
-#: src/components/modal/index.tsx:296
+#: src/components/modal/index.tsx:514
#, c-format
-msgid "is not the same as the current access token"
+msgid "Step 3:"
msgstr ""
-#: src/components/modal/index.tsx:299
+#: src/components/modal/index.tsx:516
#, c-format
-msgid "cannot be empty"
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
+msgstr ""
+
+#: src/components/modal/index.tsx:536
+#, c-format
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
+msgstr ""
+
+#: src/components/modal/index.tsx:549
+#, c-format
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
+msgstr ""
+
+#: src/components/modal/index.tsx:694
+#, c-format
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
+msgstr ""
+
+#: src/components/modal/index.tsx:701
+#, c-format
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
+msgstr ""
+
+#: src/components/modal/index.tsx:708
+#, c-format
+msgid "Deleting an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
+msgstr ""
+
+#: src/components/modal/index.tsx:743
+#, c-format
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
+msgstr ""
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:786
+#, c-format
+msgid "Is not the same as the current access token"
msgstr ""
-#: src/components/modal/index.tsx:301
+#: src/components/modal/index.tsx:791
#, c-format
-msgid "cannot be the same as the old token"
+msgid "Can't be the same as the old token"
msgstr ""
-#: src/components/modal/index.tsx:305
+#: src/components/modal/index.tsx:795
#, c-format
-msgid "is not the same"
+msgid "Is not the same"
msgstr ""
-#: src/components/modal/index.tsx:315
+#: src/components/modal/index.tsx:803
#, c-format
-msgid "You are updating the access token from instance with id %1$s"
+msgid "You are updating the access token for the instance with id %1$s"
msgstr ""
-#: src/components/modal/index.tsx:331
+#: src/components/modal/index.tsx:819
#, c-format
msgid "Old access token"
msgstr ""
-#: src/components/modal/index.tsx:332
+#: src/components/modal/index.tsx:820
#, c-format
-msgid "access token currently in use"
+msgid "Access token currently in use"
msgstr ""
-#: src/components/modal/index.tsx:338
+#: src/components/modal/index.tsx:826
#, c-format
msgid "New access token"
msgstr ""
-#: src/components/modal/index.tsx:339
+#: src/components/modal/index.tsx:827
#, c-format
-msgid "next access token to be used"
+msgid "Next access token to be used"
msgstr ""
-#: src/components/modal/index.tsx:344
+#: src/components/modal/index.tsx:832
#, c-format
msgid "Repeat access token"
msgstr ""
-#: src/components/modal/index.tsx:345
+#: src/components/modal/index.tsx:833
#, c-format
-msgid "confirm the same access token"
+msgid "Confirm the same access token"
msgstr ""
-#: src/components/modal/index.tsx:350
+#: src/components/modal/index.tsx:838
#, c-format
msgid "Clearing the access token will mean public access to the instance"
msgstr ""
-#: src/components/modal/index.tsx:377
+#: src/components/modal/index.tsx:865
#, c-format
-msgid "cannot be the same as the old access token"
+msgid "Can't be the same as the old access token"
msgstr ""
-#: src/components/modal/index.tsx:394
+#: src/components/modal/index.tsx:880
#, c-format
msgid "You are setting the access token for the new instance"
msgstr ""
-#: src/components/modal/index.tsx:420
+#: src/components/modal/index.tsx:906
#, c-format
msgid ""
"With external authorization method no check will be done by the merchant "
"backend"
msgstr ""
-#: src/components/modal/index.tsx:436
+#: src/components/modal/index.tsx:922
#, c-format
msgid "Set external authorization"
msgstr ""
-#: src/components/modal/index.tsx:448
+#: src/components/modal/index.tsx:934
#, c-format
msgid "Set access token"
msgstr ""
-#: src/components/modal/index.tsx:470
+#: src/components/modal/index.tsx:956
#, c-format
msgid "Operation in progress..."
msgstr ""
-#: src/components/modal/index.tsx:479
+#: src/components/modal/index.tsx:965
#, c-format
msgid "The operation will be automatically canceled after %1$s seconds"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:80
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr ""
+
+#: src/paths/login/index.tsx:70
+#, c-format
+msgid "Your instance cannot be found"
+msgstr ""
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr ""
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr ""
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:79
#, c-format
msgid "Instances"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:93
+#: src/paths/admin/list/TableActive.tsx:92
#, c-format
msgid "Delete"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:99
+#: src/paths/admin/list/TableActive.tsx:98
#, c-format
-msgid "add new instance"
+msgid "Add new instance"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:178
+#: src/paths/admin/list/TableActive.tsx:175
#, c-format
msgid "ID"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:181
+#: src/paths/admin/list/TableActive.tsx:178
#, c-format
msgid "Name"
msgstr ""
@@ -191,132 +483,588 @@ msgstr ""
#: src/paths/admin/list/TableActive.tsx:261
#, c-format
-msgid "There is no instances yet, add more pressing the + sign"
+msgid "There are no instances yet, add more pressing the + sign"
msgstr ""
-#: src/paths/admin/list/View.tsx:68
+#: src/paths/admin/list/View.tsx:66
#, c-format
msgid "Only show active instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:71
+#: src/paths/admin/list/View.tsx:69
#, c-format
msgid "Active"
msgstr ""
-#: src/paths/admin/list/View.tsx:78
+#: src/paths/admin/list/View.tsx:76
#, c-format
msgid "Only show deleted instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:81
+#: src/paths/admin/list/View.tsx:79
#, c-format
msgid "Deleted"
msgstr ""
-#: src/paths/admin/list/View.tsx:88
+#: src/paths/admin/list/View.tsx:86
#, c-format
msgid "Show all instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:91
+#: src/paths/admin/list/View.tsx:89
#, c-format
msgid "All"
msgstr ""
-#: src/paths/admin/list/index.tsx:101
+#: src/paths/admin/list/index.tsx:100
#, c-format
msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/admin/list/index.tsx:106
+#: src/paths/admin/list/index.tsx:105
#, c-format
msgid "Failed to delete instance"
msgstr ""
-#: src/paths/admin/list/index.tsx:124
+#: src/paths/admin/list/index.tsx:140
#, c-format
-msgid "Instance '%1$s' (ID: %2$s) has been disabled"
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
msgstr ""
-#: src/paths/admin/list/index.tsx:129
+#: src/paths/admin/list/index.tsx:145
#, c-format
msgid "Failed to purge instance"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:41
+#: src/components/exception/AsyncButton.tsx:43
#, c-format
-msgid "Pending KYC verification"
+msgid "Loading..."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:66
+#: src/components/form/InputPaytoForm.tsx:86
#, c-format
-msgid "Timed out"
+msgid "This is not a valid bitcoin address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:103
+#: src/components/form/InputPaytoForm.tsx:99
#, c-format
-msgid "Exchange"
+msgid "This is not a valid Ethereum address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:106
+#: src/components/form/InputPaytoForm.tsx:128
#, c-format
-msgid "Target account"
+msgid "This is not a valid host."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:109
+#: src/components/form/InputPaytoForm.tsx:151
#, c-format
-msgid "KYC URL"
+msgid "IBAN numbers usually have more that 4 digits"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:144
+#: src/components/form/InputPaytoForm.tsx:153
+#, c-format
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:330
#, c-format
msgid "Code"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:147
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, c-format
+msgid "International Bank Account Number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, c-format
+msgid "Invalid url"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, c-format
+msgid "Auth type"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, c-format
+msgid "With token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, c-format
+msgid "Do not change"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, c-format
+msgid "Not verified"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, c-format
+msgid "Confirm operation"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, c-format
+msgid "Account details"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr ""
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, c-format
+msgid "Could not create account"
+msgstr ""
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr ""
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, c-format
+msgid "Bank accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, c-format
+msgid "Add new account"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, c-format
+msgid "Wire method: Bitcoin"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, c-format
+msgid "Delete selected accounts from the database"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, c-format
+msgid "Wire method: x-taler-bank"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, c-format
+msgid "Account name"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, c-format
+msgid "Wire method: IBAN"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, c-format
+msgid "Other accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format
+msgid "Reason"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:140
+#, c-format
+msgid "The exchange require a account verification."
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
#, c-format
msgid "Http Status"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:177
+#: src/paths/instance/kyc/list/ListPage.tsx:199
#, c-format
msgid "No pending kyc verification!"
msgstr ""
-#: src/components/form/InputDate.tsx:123
+#: src/components/form/InputDate.tsx:127
#, c-format
-msgid "change value to unknown date"
+msgid "Change value to unknown date"
msgstr ""
-#: src/components/form/InputDate.tsx:124
+#: src/components/form/InputDate.tsx:128
#, c-format
-msgid "change value to empty"
+msgid "Change value to empty"
msgstr ""
-#: src/components/form/InputDate.tsx:131
+#: src/components/form/InputDate.tsx:140
#, c-format
-msgid "clear"
+msgid "Change value to never"
msgstr ""
-#: src/components/form/InputDate.tsx:136
+#: src/components/form/InputDate.tsx:145
#, c-format
-msgid "change value to never"
+msgid "Never"
msgstr ""
-#: src/components/form/InputDate.tsx:141
+#: src/components/picker/DurationPicker.tsx:55
#, c-format
-msgid "never"
+msgid "days"
msgstr ""
-#: src/components/form/InputLocation.tsx:29
+#: src/components/picker/DurationPicker.tsx:65
#, c-format
-msgid "Country"
+msgid "hours"
msgstr ""
-#: src/components/form/InputLocation.tsx:33
+#: src/components/picker/DurationPicker.tsx:76
#, c-format
-msgid "Address"
+msgid "minutes"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:62
+#, c-format
+msgid "Forever"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr ""
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
msgstr ""
#: src/components/form/InputLocation.tsx:39
@@ -359,126 +1107,141 @@ msgstr ""
msgid "Country subdivision"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:66
-#, c-format
-msgid "Product id"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:69
+#: src/components/form/InputSearchOnList.tsx:80
#, c-format
msgid "Description"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:94
-#, c-format
-msgid "Product"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:95
+#: src/components/form/InputSearchOnList.tsx:106
#, c-format
-msgid "search products by it's description or id"
+msgid "Enter description or id"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:151
+#: src/components/form/InputSearchOnList.tsx:164
#, c-format
-msgid "no products found with that description"
+msgid "no match found with that description or id"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:56
+#: src/components/product/InventoryProductForm.tsx:57
#, c-format
msgid "You must enter a valid product identifier."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:64
+#: src/components/product/InventoryProductForm.tsx:65
#, c-format
msgid "Quantity must be greater than 0!"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:76
+#: src/components/product/InventoryProductForm.tsx:77
#, c-format
msgid ""
"This quantity exceeds remaining stock. Currently, only %1$s units remain "
"unreserved in stock."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:109
+#: src/components/product/InventoryProductForm.tsx:100
+#, c-format
+msgid "Search product"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:112
#, c-format
msgid "Quantity"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:110
+#: src/components/product/InventoryProductForm.tsx:113
#, c-format
-msgid "how many products will be added"
+msgid "How many products will be added"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:117
+#: src/components/product/InventoryProductForm.tsx:120
#, c-format
msgid "Add from inventory"
msgstr ""
-#: src/components/form/InputImage.tsx:105
+#: src/components/form/InputImage.tsx:107
#, c-format
-msgid "Image should be smaller than 1 MB"
+msgid "Image must be smaller than 1 MB"
msgstr ""
-#: src/components/form/InputImage.tsx:110
+#: src/components/form/InputImage.tsx:112
#, c-format
msgid "Add"
msgstr ""
-#: src/components/form/InputImage.tsx:115
+#: src/components/form/InputImage.tsx:122
#, c-format
msgid "Remove"
msgstr ""
-#: src/components/form/InputTaxes.tsx:113
+#: src/components/form/InputTaxes.tsx:47
+#, c-format
+msgid "Invalid"
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:103
#, c-format
msgid "No taxes configured for this product."
msgstr ""
-#: src/components/form/InputTaxes.tsx:119
+#: src/components/form/InputTaxes.tsx:109
#, c-format
msgid "Amount"
msgstr ""
-#: src/components/form/InputTaxes.tsx:120
+#: src/components/form/InputTaxes.tsx:110
#, c-format
msgid ""
"Taxes can be in currencies that differ from the main currency used by the "
"merchant."
msgstr ""
-#: src/components/form/InputTaxes.tsx:122
+#: src/components/form/InputTaxes.tsx:112
#, c-format
msgid ""
"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
msgstr ""
-#: src/components/form/InputTaxes.tsx:131
+#: src/components/form/InputTaxes.tsx:121
#, c-format
msgid "Legal name of the tax, e.g. VAT or import duties."
msgstr ""
-#: src/components/form/InputTaxes.tsx:137
+#: src/components/form/InputTaxes.tsx:127
#, c-format
-msgid "add tax to the tax list"
+msgid "Add tax to the tax list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:72
+#: src/components/product/NonInventoryProductForm.tsx:71
#, c-format
-msgid "describe and add a product that is not in the inventory list"
+msgid "Describe and add a product that is not in the inventory list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:75
+#: src/components/product/NonInventoryProductForm.tsx:74
#, c-format
msgid "Add custom product"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:86
+#: src/components/product/NonInventoryProductForm.tsx:85
#, c-format
msgid "Complete information of the product"
msgstr ""
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, c-format
+msgid "Must be a number"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, c-format
+msgid "Must be grater than 0"
+msgstr ""
+
#: src/components/product/NonInventoryProductForm.tsx:185
#, c-format
msgid "Image"
@@ -486,12 +1249,12 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:186
#, c-format
-msgid "photo of the product"
+msgid "Photo of the product."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:192
#, c-format
-msgid "full product description"
+msgid "Full product description."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:196
@@ -501,7 +1264,7 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:197
#, c-format
-msgid "name of the product unit"
+msgid "Name of the product unit."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:201
@@ -511,796 +1274,863 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:202
#, c-format
-msgid "amount in the current currency"
-msgstr ""
-
-#: src/components/product/NonInventoryProductForm.tsx:211
-#, c-format
-msgid "Taxes"
-msgstr ""
-
-#: src/components/product/ProductList.tsx:38
-#, c-format
-msgid "image"
+msgid "Amount in the current currency."
msgstr ""
-#: src/components/product/ProductList.tsx:41
+#: src/components/product/NonInventoryProductForm.tsx:208
#, c-format
-msgid "description"
+msgid "How many products will be added."
msgstr ""
-#: src/components/product/ProductList.tsx:44
+#: src/components/product/NonInventoryProductForm.tsx:211
#, c-format
-msgid "quantity"
+msgid "Taxes"
msgstr ""
-#: src/components/product/ProductList.tsx:47
+#: src/components/product/ProductList.tsx:46
#, c-format
-msgid "unit price"
+msgid "Unit price"
msgstr ""
-#: src/components/product/ProductList.tsx:50
+#: src/components/product/ProductList.tsx:49
#, c-format
-msgid "total price"
+msgid "Total price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:153
+#: src/paths/instance/orders/create/CreatePage.tsx:162
#, c-format
-msgid "required"
+msgid "Must be greater than 0"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:157
+#: src/paths/instance/orders/create/CreatePage.tsx:173
#, c-format
-msgid "not valid"
+msgid "Refund deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:159
+#: src/paths/instance/orders/create/CreatePage.tsx:179
#, c-format
-msgid "must be greater than 0"
+msgid "Wire transfer deadline can't be before refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:164
+#: src/paths/instance/orders/create/CreatePage.tsx:188
#, c-format
-msgid "not a valid json"
+msgid "Wire transfer deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:170
+#: src/paths/instance/orders/create/CreatePage.tsx:196
#, c-format
-msgid "should be in the future"
+msgid "Must have a refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:173
+#: src/paths/instance/orders/create/CreatePage.tsx:201
#, c-format
-msgid "refund deadline cannot be before pay deadline"
+msgid "Auto refund can't be after refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:179
+#: src/paths/instance/orders/create/CreatePage.tsx:208
#, c-format
-msgid "wire transfer deadline cannot be before refund deadline"
+msgid "Must be in the future"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:190
+#: src/paths/instance/orders/create/CreatePage.tsx:376
#, c-format
-msgid "wire transfer deadline cannot be before pay deadline"
+msgid "Simple"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:197
+#: src/paths/instance/orders/create/CreatePage.tsx:388
#, c-format
-msgid "should have a refund deadline"
+msgid "Advanced"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:202
+#: src/paths/instance/orders/create/CreatePage.tsx:400
#, c-format
-msgid "auto refund cannot be after refund deadline"
+msgid "Manage products in order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:360
+#: src/paths/instance/orders/create/CreatePage.tsx:404
#, c-format
-msgid "Manage products in order"
+msgid "%1$s products with a total price of %2$s."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:369
+#: src/paths/instance/orders/create/CreatePage.tsx:411
#, c-format
msgid "Manage list of products in the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:391
+#: src/paths/instance/orders/create/CreatePage.tsx:435
#, c-format
msgid "Remove this product from the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:415
-#, c-format
-msgid "Total price"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:417
+#: src/paths/instance/orders/create/CreatePage.tsx:461
#, c-format
-msgid "total product price added up"
+msgid "Total product price added up"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:430
+#: src/paths/instance/orders/create/CreatePage.tsx:474
#, c-format
msgid "Amount to be paid by the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:436
+#: src/paths/instance/orders/create/CreatePage.tsx:480
#, c-format
msgid "Order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:437
+#: src/paths/instance/orders/create/CreatePage.tsx:481
#, c-format
-msgid "final order price"
+msgid "Final order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:444
+#: src/paths/instance/orders/create/CreatePage.tsx:488
#, c-format
msgid "Summary"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:445
+#: src/paths/instance/orders/create/CreatePage.tsx:489
#, c-format
msgid "Title of the order to be shown to the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:450
+#: src/paths/instance/orders/create/CreatePage.tsx:495
#, c-format
-msgid "Shipping and Fulfillment"
+msgid "Shipping and fulfillment"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:455
+#: src/paths/instance/orders/create/CreatePage.tsx:500
#, c-format
msgid "Delivery date"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:456
+#: src/paths/instance/orders/create/CreatePage.tsx:501
#, c-format
msgid "Deadline for physical delivery assured by the merchant."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:461
+#: src/paths/instance/orders/create/CreatePage.tsx:506
#, c-format
msgid "Location"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:462
+#: src/paths/instance/orders/create/CreatePage.tsx:507
#, c-format
-msgid "address where the products will be delivered"
+msgid "Address where the products will be delivered"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:469
+#: src/paths/instance/orders/create/CreatePage.tsx:514
#, c-format
msgid "Fulfillment URL"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:470
+#: src/paths/instance/orders/create/CreatePage.tsx:515
#, c-format
msgid "URL to which the user will be redirected after successful payment."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:476
+#: src/paths/instance/orders/create/CreatePage.tsx:523
#, c-format
msgid "Taler payment options"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:477
+#: src/paths/instance/orders/create/CreatePage.tsx:524
#, c-format
msgid "Override default Taler payment settings for this order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:481
+#: src/paths/instance/orders/create/CreatePage.tsx:529
#, c-format
-msgid "Payment deadline"
+msgid "Payment time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:482
+#: src/paths/instance/orders/create/CreatePage.tsx:535
#, c-format
msgid ""
-"Deadline for the customer to pay for the offer before it expires. Inventory "
-"products will be reserved until this deadline."
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:486
+#: src/paths/instance/orders/create/CreatePage.tsx:552
#, c-format
-msgid "Refund deadline"
+msgid "Default"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:487
+#: src/paths/instance/orders/create/CreatePage.tsx:561
#, c-format
-msgid "Time until which the order can be refunded by the merchant."
+msgid "Refund time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:491
-#, c-format
-msgid "Wire transfer deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:492
-#, c-format
-msgid "Deadline for the exchange to make the wire transfer."
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:496
-#, c-format
-msgid "Auto-refund deadline"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:497
+#: src/paths/instance/orders/create/CreatePage.tsx:569
#, c-format
msgid ""
-"Time until which the wallet will automatically check for refunds without "
-"user interaction."
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:502
+#: src/paths/instance/orders/create/CreatePage.tsx:594
#, c-format
-msgid "Maximum deposit fee"
+msgid "Wire transfer time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:503
+#: src/paths/instance/orders/create/CreatePage.tsx:602
#, c-format
msgid ""
-"Maximum deposit fees the merchant is willing to cover for this order. Higher "
-"deposit fees must be covered in full by the consumer."
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:507
+#: src/paths/instance/orders/create/CreatePage.tsx:628
#, c-format
-msgid "Maximum wire fee"
+msgid "Auto-refund time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:508
+#: src/paths/instance/orders/create/CreatePage.tsx:634
#, c-format
msgid ""
-"Maximum aggregate wire fees the merchant is willing to cover for this order. "
-"Wire fees exceeding this amount are to be covered by the customers."
+"Time until which the wallet will automatically check for refunds without "
+"user interaction."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:512
+#: src/paths/instance/orders/create/CreatePage.tsx:642
#, c-format
-msgid "Wire fee amortization"
+msgid "Maximum fee"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:513
+#: src/paths/instance/orders/create/CreatePage.tsx:643
#, c-format
msgid ""
-"Factor by which wire fees exceeding the above threshold are divided to "
-"determine the share of excess wire fees to be paid explicitly by the "
-"consumer."
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:517
+#: src/paths/instance/orders/create/CreatePage.tsx:649
#, c-format
msgid "Create token"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:518
+#: src/paths/instance/orders/create/CreatePage.tsx:650
#, c-format
msgid ""
-"Uncheck this option if the merchant backend generated an order ID with "
-"enough entropy to prevent adversarial claims."
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:522
+#: src/paths/instance/orders/create/CreatePage.tsx:656
#, c-format
msgid "Minimum age required"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:523
+#: src/paths/instance/orders/create/CreatePage.tsx:657
#, c-format
msgid ""
"Any value greater than 0 will limit the coins able be used to pay this "
"contract. If empty the age restriction will be defined by the products"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:526
+#: src/paths/instance/orders/create/CreatePage.tsx:660
#, c-format
msgid "Min age defined by the producs is %1$s"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:534
+#: src/paths/instance/orders/create/CreatePage.tsx:661
+#, c-format
+msgid "No product with age restriction in this order"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:671
#, c-format
msgid "Additional information"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:535
+#: src/paths/instance/orders/create/CreatePage.tsx:672
#, c-format
msgid "Custom information to be included in the contract for this order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:541
+#: src/paths/instance/orders/create/CreatePage.tsx:681
#, c-format
msgid "You must enter a value in JavaScript Object Notation (JSON)."
msgstr ""
-#: src/components/picker/DurationPicker.tsx:55
+#: src/paths/instance/orders/create/CreatePage.tsx:707
#, c-format
-msgid "days"
+msgid "Custom field name"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:65
+#: src/paths/instance/orders/create/CreatePage.tsx:793
#, c-format
-msgid "hours"
+msgid "Disabled"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:76
+#: src/paths/instance/orders/create/CreatePage.tsx:796
#, c-format
-msgid "minutes"
+msgid "No deadline"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:87
+#: src/paths/instance/orders/create/CreatePage.tsx:797
#, c-format
-msgid "seconds"
+msgid "Deadline at %1$s"
msgstr ""
-#: src/components/form/InputDuration.tsx:53
+#: src/paths/instance/orders/create/index.tsx:109
#, c-format
-msgid "forever"
+msgid "Could not create order"
msgstr ""
-#: src/components/form/InputDuration.tsx:62
+#: src/paths/instance/orders/create/index.tsx:111
#, c-format
-msgid "%1$sM"
+msgid "No exchange would accept a payment because of KYC requirements."
msgstr ""
-#: src/components/form/InputDuration.tsx:64
+#: src/paths/instance/orders/create/index.tsx:129
#, c-format
-msgid "%1$sY"
+msgid "No more stock for product with ID \"%1$s\"."
msgstr ""
-#: src/components/form/InputDuration.tsx:66
+#: src/paths/instance/orders/list/Table.tsx:75
#, c-format
-msgid "%1$sd"
+msgid "Orders"
msgstr ""
-#: src/components/form/InputDuration.tsx:68
+#: src/paths/instance/orders/list/Table.tsx:81
#, c-format
-msgid "%1$sh"
+msgid "Create order"
msgstr ""
-#: src/components/form/InputDuration.tsx:70
+#: src/paths/instance/orders/list/Table.tsx:138
#, c-format
-msgid "%1$smin"
+msgid "Load first page"
msgstr ""
-#: src/components/form/InputDuration.tsx:72
+#: src/paths/instance/orders/list/Table.tsx:145
#, c-format
-msgid "%1$ssec"
+msgid "Date"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:75
+#: src/paths/instance/orders/list/Table.tsx:191
#, c-format
-msgid "Orders"
+msgid "Refund"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:81
+#: src/paths/instance/orders/list/Table.tsx:200
#, c-format
-msgid "create order"
+msgid "copy url"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:147
+#: src/paths/instance/orders/list/Table.tsx:213
#, c-format
-msgid "load newer orders"
+msgid "Load more orders after the last one"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:154
+#: src/paths/instance/orders/list/Table.tsx:216
#, c-format
-msgid "Date"
+msgid "Load next page"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:200
+#: src/paths/instance/orders/list/Table.tsx:233
#, c-format
-msgid "Refund"
+msgid "No orders have been found matching your query!"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:209
+#: src/paths/instance/orders/list/Table.tsx:280
#, c-format
-msgid "copy url"
+msgid "Duplicated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:225
+#: src/paths/instance/orders/list/Table.tsx:293
#, c-format
-msgid "load older orders"
+msgid "This value exceed the refundable amount"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:242
+#: src/paths/instance/orders/list/Table.tsx:381
#, c-format
-msgid "No orders have been found matching your query!"
+msgid "Amount to be refunded"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:288
+#: src/paths/instance/orders/list/Table.tsx:383
#, c-format
-msgid "duplicated"
+msgid "Max refundable:"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:299
+#: src/paths/instance/orders/list/Table.tsx:391
#, c-format
-msgid "invalid format"
+msgid "Requested by the customer"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:301
+#: src/paths/instance/orders/list/Table.tsx:392
#, c-format
-msgid "this value exceed the refundable amount"
+msgid "Other"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:346
+#: src/paths/instance/orders/list/Table.tsx:395
#, c-format
-msgid "date"
+msgid "Why this order is being refunded"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:349
+#: src/paths/instance/orders/list/Table.tsx:401
#, c-format
-msgid "amount"
+msgid "More information to give context"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:352
+#: src/paths/instance/orders/details/DetailPage.tsx:70
#, c-format
-msgid "reason"
+msgid "Contract terms"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:389
+#: src/paths/instance/orders/details/DetailPage.tsx:76
#, c-format
-msgid "amount to be refunded"
+msgid "Human-readable description of the whole purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:391
+#: src/paths/instance/orders/details/DetailPage.tsx:82
#, c-format
-msgid "Max refundable:"
+msgid "Total price for the transaction"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:396
+#: src/paths/instance/orders/details/DetailPage.tsx:89
#, c-format
-msgid "Reason"
+msgid "URL for this purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:397
+#: src/paths/instance/orders/details/DetailPage.tsx:95
#, c-format
-msgid "Choose one..."
+msgid "Max fee"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:399
+#: src/paths/instance/orders/details/DetailPage.tsx:96
#, c-format
-msgid "requested by the customer"
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:400
+#: src/paths/instance/orders/details/DetailPage.tsx:101
#, c-format
-msgid "other"
+msgid "Created at"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:403
+#: src/paths/instance/orders/details/DetailPage.tsx:102
#, c-format
-msgid "why this order is being refunded"
+msgid "Time when this contract was generated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:409
+#: src/paths/instance/orders/details/DetailPage.tsx:107
#, c-format
-msgid "more information to give context"
+msgid "Refund deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:62
+#: src/paths/instance/orders/details/DetailPage.tsx:108
#, c-format
-msgid "Contract Terms"
+msgid "After this deadline has passed no refunds will be accepted"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:68
+#: src/paths/instance/orders/details/DetailPage.tsx:113
#, c-format
-msgid "human-readable description of the whole purchase"
+msgid "Payment deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:74
+#: src/paths/instance/orders/details/DetailPage.tsx:114
#, c-format
-msgid "total price for the transaction"
+msgid ""
+"After this deadline, the merchant won't accept payments for the contract"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:81
+#: src/paths/instance/orders/details/DetailPage.tsx:119
#, c-format
-msgid "URL for this purchase"
+msgid "Wire transfer deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:87
+#: src/paths/instance/orders/details/DetailPage.tsx:120
#, c-format
-msgid "Max fee"
+msgid "Transfer deadline for the exchange"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:88
+#: src/paths/instance/orders/details/DetailPage.tsx:126
#, c-format
-msgid "maximum total deposit fee accepted by the merchant for this contract"
+msgid "Time indicating when the order should be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:93
+#: src/paths/instance/orders/details/DetailPage.tsx:132
#, c-format
-msgid "Max wire fee"
+msgid "Where the order will be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:94
+#: src/paths/instance/orders/details/DetailPage.tsx:140
#, c-format
-msgid "maximum wire fee accepted by the merchant"
+msgid "Auto-refund delay"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:100
+#: src/paths/instance/orders/details/DetailPage.tsx:141
#, c-format
msgid ""
-"over how many customer transactions does the merchant expect to amortize "
-"wire fees on average"
+"How long the wallet should try to get an automatic refund for the purchase"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:105
+#: src/paths/instance/orders/details/DetailPage.tsx:146
#, c-format
-msgid "Created at"
+msgid "Extra info"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:106
+#: src/paths/instance/orders/details/DetailPage.tsx:147
#, c-format
-msgid "time when this contract was generated"
+msgid "Extra data that is only interpreted by the merchant frontend"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:112
+#: src/paths/instance/orders/details/DetailPage.tsx:220
#, c-format
-msgid "after this deadline has passed no refunds will be accepted"
+msgid "Order"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:118
+#: src/paths/instance/orders/details/DetailPage.tsx:222
#, c-format
-msgid ""
-"after this deadline, the merchant won't accept payments for the contract"
+msgid "Claimed"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:124
+#: src/paths/instance/orders/details/DetailPage.tsx:249
#, c-format
-msgid "transfer deadline for the exchange"
+msgid "Claimed at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:130
+#: src/paths/instance/orders/details/DetailPage.tsx:271
#, c-format
-msgid "time indicating when the order should be delivered"
+msgid "Timeline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:136
+#: src/paths/instance/orders/details/DetailPage.tsx:277
#, c-format
-msgid "where the order will be delivered"
+msgid "Payment details"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:144
+#: src/paths/instance/orders/details/DetailPage.tsx:297
#, c-format
-msgid "Auto-refund delay"
+msgid "Order status"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:145
+#: src/paths/instance/orders/details/DetailPage.tsx:307
#, c-format
-msgid ""
-"how long the wallet should try to get an automatic refund for the purchase"
+msgid "Product list"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:150
+#: src/paths/instance/orders/details/DetailPage.tsx:459
#, c-format
-msgid "Extra info"
+msgid "Paid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:151
+#: src/paths/instance/orders/details/DetailPage.tsx:463
#, c-format
-msgid "extra data that is only interpreted by the merchant frontend"
+msgid "Wired"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:219
+#: src/paths/instance/orders/details/DetailPage.tsx:468
#, c-format
-msgid "Order"
+msgid "Refunded"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:221
+#: src/paths/instance/orders/details/DetailPage.tsx:488
#, c-format
-msgid "claimed"
+msgid "Refund order"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:247
+#: src/paths/instance/orders/details/DetailPage.tsx:489
#, c-format
-msgid "claimed at"
+msgid "Not refundable"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:265
+#: src/paths/instance/orders/details/DetailPage.tsx:519
#, c-format
-msgid "Timeline"
+msgid "Next event in"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:271
+#: src/paths/instance/orders/details/DetailPage.tsx:555
#, c-format
-msgid "Payment details"
+msgid "Refunded amount"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:291
+#: src/paths/instance/orders/details/DetailPage.tsx:562
#, c-format
-msgid "Order status"
+msgid "Refund taken"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:572
#, c-format
-msgid "Product list"
+msgid "Status URL"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:585
+#, c-format
+msgid "Refund URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:451
+#: src/paths/instance/orders/details/DetailPage.tsx:639
#, c-format
-msgid "paid"
+msgid "Unpaid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:455
+#: src/paths/instance/orders/details/DetailPage.tsx:657
#, c-format
-msgid "wired"
+msgid "Pay at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:460
+#: src/paths/instance/orders/details/DetailPage.tsx:710
#, c-format
-msgid "refunded"
+msgid "Order status URL"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:480
+#: src/paths/instance/orders/details/DetailPage.tsx:714
#, c-format
-msgid "refund order"
+msgid "Payment URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:481
+#: src/paths/instance/orders/details/DetailPage.tsx:743
#, c-format
-msgid "not refundable"
+msgid ""
+"Unknown order status. This is an error, please contact the administrator."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:489
+#: src/paths/instance/orders/details/DetailPage.tsx:770
#, c-format
-msgid "refund"
+msgid "Back"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:553
+#: src/paths/instance/orders/details/index.tsx:88
#, c-format
-msgid "Refunded amount"
+msgid "Refund created successfully"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:560
+#: src/paths/instance/orders/details/index.tsx:95
#, c-format
-msgid "Refund taken"
+msgid "Could not create the refund"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:570
+#: src/paths/instance/orders/details/index.tsx:97
#, c-format
-msgid "Status URL"
+msgid "There are pending KYC requirements."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:583
+#: src/components/form/JumpToElementById.tsx:39
#, c-format
-msgid "Refund URI"
+msgid "Missing id"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:636
+#: src/components/form/JumpToElementById.tsx:48
#, c-format
-msgid "unpaid"
+msgid "Not found"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:654
+#: src/paths/instance/orders/list/ListPage.tsx:83
#, c-format
-msgid "pay at"
+msgid "Select date to show nearby orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:666
+#: src/paths/instance/orders/list/ListPage.tsx:96
#, c-format
-msgid "created at"
+msgid "Only show paid orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:707
+#: src/paths/instance/orders/list/ListPage.tsx:99
#, c-format
-msgid "Order status URL"
+msgid "New"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:711
+#: src/paths/instance/orders/list/ListPage.tsx:116
#, c-format
-msgid "Payment URI"
+msgid "Only show orders with refunds"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:740
+#: src/paths/instance/orders/list/ListPage.tsx:126
#, c-format
msgid ""
-"Unknown order status. This is an error, please contact the administrator."
+"Only show orders where customers paid, but wire payments from payment "
+"provider are still pending"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:767
+#: src/paths/instance/orders/list/ListPage.tsx:129
#, c-format
-msgid "Back"
+msgid "Not wired"
msgstr ""
-#: src/paths/instance/orders/details/index.tsx:79
+#: src/paths/instance/orders/list/ListPage.tsx:139
#, c-format
-msgid "refund created successfully"
+msgid "Completed"
msgstr ""
-#: src/paths/instance/orders/details/index.tsx:85
+#: src/paths/instance/orders/list/ListPage.tsx:146
#, c-format
-msgid "could not create the refund"
+msgid "Remove all filters"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:78
+#: src/paths/instance/orders/list/ListPage.tsx:164
#, c-format
-msgid "select date to show nearby orders"
+msgid "Clear date filter"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:94
+#: src/paths/instance/orders/list/ListPage.tsx:178
#, c-format
-msgid "order id"
+msgid "Jump to date (%1$s)"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:100
+#: src/paths/instance/orders/list/index.tsx:113
#, c-format
-msgid "jump to order with the given order ID"
+msgid "Jump to order with the given product ID"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:122
+#: src/paths/instance/orders/list/index.tsx:114
#, c-format
-msgid "remove all filters"
+msgid "Order id"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:132
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
#, c-format
-msgid "only show paid orders"
+msgid "Invalid. Please insert only characters and numbers"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:135
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
#, c-format
-msgid "Paid"
+msgid "Just letters and numbers from 2 to 7"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:142
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
#, c-format
-msgid "only show orders with refunds"
+msgid "Size of the key must be 32"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:145
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
#, c-format
-msgid "Refunded"
+msgid "Internal id on the system"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
+#, c-format
+msgid "Useful to identify the device physically"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
+#, c-format
+msgid "Verification algorithm"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
+#, c-format
+msgid "Algorithm to use to verify transaction in offline mode"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:152
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
+#, c-format
+msgid "Device key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
+#, c-format
+msgid "Be sure to be very hard to guess or use the random generator"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
+#, c-format
+msgid "Your device need to have exactly the same value"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
+#, c-format
+msgid "Generate random secret key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
+#, c-format
+msgid "Random"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
#, c-format
msgid ""
-"only show orders where customers paid, but wire payments from payment "
-"provider are still pending"
+"You can scan the next QR code with your device or save the key before "
+"continuing."
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:155
+#: src/paths/instance/otp_devices/create/index.tsx:60
#, c-format
-msgid "Not wired"
+msgid "Device added successfully"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:170
+#: src/paths/instance/otp_devices/create/index.tsx:66
#, c-format
-msgid "clear date filter"
+msgid "Could not add device"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:184
+#: src/paths/instance/otp_devices/list/Table.tsx:57
#, c-format
-msgid "date (YYYY/MM/DD)"
+msgid "OTP Devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:103
+#: src/paths/instance/otp_devices/list/Table.tsx:62
#, c-format
-msgid "Enter an order id"
+msgid "Add new devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:111
+#: src/paths/instance/otp_devices/list/Table.tsx:117
#, c-format
-msgid "order not found"
+msgid "Load more devices before the first one"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:178
+#: src/paths/instance/otp_devices/list/Table.tsx:155
#, c-format
-msgid "could not get the order to refund"
+msgid "Delete selected devices from the database"
msgstr ""
-#: src/components/exception/AsyncButton.tsx:43
+#: src/paths/instance/otp_devices/list/Table.tsx:170
#, c-format
-msgid "Loading..."
+msgid "Load more devices after the last one"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:90
+#, c-format
+msgid "Device delete successfully"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:95
+#, c-format
+msgid "Could not delete the device"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
+#, c-format
+msgid "Device:"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
+#, c-format
+msgid "Not modified"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
+#, c-format
+msgid "Change key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:119
+#, c-format
+msgid "Could not update template"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:121
+#, c-format
+msgid "Template id is unknown"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:129
+#, c-format
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
msgstr ""
#: src/components/form/InputStock.tsx:99
#, c-format
msgid ""
-"click here to configure the stock of the product, leave it as is and the "
-"backend will not control stock"
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
msgstr ""
#: src/components/form/InputStock.tsx:109
@@ -1310,7 +2140,7 @@ msgstr ""
#: src/components/form/InputStock.tsx:115
#, c-format
-msgid "this product has been configured without stock control"
+msgid "This product has been configured without stock control"
msgstr ""
#: src/components/form/InputStock.tsx:119
@@ -1320,1404 +2150,1515 @@ msgstr ""
#: src/components/form/InputStock.tsx:136
#, c-format
-msgid "lost cannot be greater than current and incoming (max %1$s)"
+msgid "Lost can't be greater than current and incoming (max %1$s)"
msgstr ""
-#: src/components/form/InputStock.tsx:176
+#: src/components/form/InputStock.tsx:169
#, c-format
msgid "Incoming"
msgstr ""
-#: src/components/form/InputStock.tsx:177
+#: src/components/form/InputStock.tsx:170
#, c-format
msgid "Lost"
msgstr ""
-#: src/components/form/InputStock.tsx:192
+#: src/components/form/InputStock.tsx:185
#, c-format
msgid "Current"
msgstr ""
-#: src/components/form/InputStock.tsx:196
+#: src/components/form/InputStock.tsx:189
#, c-format
-msgid "remove stock control for this product"
+msgid "Remove stock control for this product"
msgstr ""
-#: src/components/form/InputStock.tsx:202
+#: src/components/form/InputStock.tsx:195
#, c-format
msgid "without stock"
msgstr ""
-#: src/components/form/InputStock.tsx:211
+#: src/components/form/InputStock.tsx:204
#, c-format
msgid "Next restock"
msgstr ""
-#: src/components/form/InputStock.tsx:217
+#: src/components/form/InputStock.tsx:208
+#, c-format
+msgid "Warehouse address"
+msgstr ""
+
+#: src/components/form/InputArray.tsx:118
#, c-format
-msgid "Delivery address"
+msgid "Add element to the list"
msgstr ""
-#: src/components/product/ProductForm.tsx:133
+#: src/components/product/ProductForm.tsx:120
#, c-format
-msgid "product identification to use in URLs (for internal use only)"
+msgid "Invalid amount"
msgstr ""
-#: src/components/product/ProductForm.tsx:139
+#: src/components/product/ProductForm.tsx:191
#, c-format
-msgid "illustration of the product for customers"
+msgid "Product identification to use in URLs (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:145
+#: src/components/product/ProductForm.tsx:197
#, c-format
-msgid "product description for customers"
+msgid "Illustration of the product for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:149
+#: src/components/product/ProductForm.tsx:203
#, c-format
-msgid "Age restricted"
+msgid "Product description for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:150
+#: src/components/product/ProductForm.tsx:207
#, c-format
-msgid "is this product restricted for customer below certain age?"
+msgid "Age restriction"
msgstr ""
-#: src/components/product/ProductForm.tsx:155
+#: src/components/product/ProductForm.tsx:208
+#, c-format
+msgid "Is this product restricted for customer below certain age?"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:209
+#, c-format
+msgid "Minimum age of the customer"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:213
+#, c-format
+msgid "Unit name"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:214
#, c-format
msgid ""
-"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
-"items, 5 meters) for customers"
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:215
+#, c-format
+msgid "Example: kg, items or liters"
msgstr ""
-#: src/components/product/ProductForm.tsx:160
+#: src/components/product/ProductForm.tsx:219
+#, c-format
+msgid "Price per unit"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:220
#, c-format
msgid ""
-"sale price for customers, including taxes, for above units of the product"
+"Sale price for customers, including taxes, for above units of the product."
msgstr ""
-#: src/components/product/ProductForm.tsx:164
+#: src/components/product/ProductForm.tsx:224
#, c-format
msgid "Stock"
msgstr ""
-#: src/components/product/ProductForm.tsx:166
+#: src/components/product/ProductForm.tsx:226
#, c-format
-msgid ""
-"product inventory for products with finite supply (for internal use only)"
+msgid "Inventory for products with finite supply (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:171
+#: src/components/product/ProductForm.tsx:231
#, c-format
-msgid "taxes included in the product price, exposed to customers"
+msgid "Taxes included in the product price, exposed to customers."
msgstr ""
-#: src/paths/instance/products/create/CreatePage.tsx:66
+#: src/components/product/ProductForm.tsx:235
#, c-format
-msgid "Need to complete marked fields"
+msgid "Categories"
msgstr ""
-#: src/paths/instance/products/create/index.tsx:51
+#: src/components/product/ProductForm.tsx:241
#, c-format
-msgid "could not create product"
+msgid "Search by category description or id"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:68
+#: src/components/product/ProductForm.tsx:242
#, c-format
-msgid "Products"
+msgid "Categories where this product will be listed on."
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:52
+#, c-format
+msgid "Product created successfully"
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:58
+#, c-format
+msgid "Could not create product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:73
+#: src/paths/instance/products/list/Table.tsx:76
#, c-format
-msgid "add product to inventory"
+msgid "Inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:137
+#: src/paths/instance/products/list/Table.tsx:81
#, c-format
-msgid "Sell"
+msgid "Add product to inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:143
+#: src/paths/instance/products/list/Table.tsx:163
#, c-format
-msgid "Profit"
+msgid "Sales"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:149
+#: src/paths/instance/products/list/Table.tsx:169
#, c-format
msgid "Sold"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:210
+#: src/paths/instance/products/list/Table.tsx:235
#, c-format
-msgid "free"
+msgid "Free"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:248
+#: src/paths/instance/products/list/Table.tsx:275
#, c-format
-msgid "go to product update page"
+msgid "Go to product update page"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:255
+#: src/paths/instance/products/list/Table.tsx:282
#, c-format
msgid "Update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:260
+#: src/paths/instance/products/list/Table.tsx:287
#, c-format
-msgid "remove this product from the database"
+msgid "Remove this product from the database"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:331
+#: src/paths/instance/products/list/Table.tsx:323
#, c-format
-msgid "update the product with new price"
+msgid "Load more products after the last one"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:341
+#: src/paths/instance/products/list/Table.tsx:365
#, c-format
-msgid "update product with new price"
+msgid "Update the product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:399
+#: src/paths/instance/products/list/Table.tsx:376
#, c-format
-msgid "add more elements to the inventory"
+msgid "Update product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:404
+#: src/paths/instance/products/list/Table.tsx:387
#, c-format
-msgid "report elements lost in the inventory"
+msgid "Confirm update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:409
+#: src/paths/instance/products/list/Table.tsx:435
#, c-format
-msgid "new price for the product"
+msgid "Add more elements to the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:421
+#: src/paths/instance/products/list/Table.tsx:440
#, c-format
-msgid "the are value with errors"
+msgid "Report elements lost in the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:422
+#: src/paths/instance/products/list/Table.tsx:445
#, c-format
-msgid "update product with new stock and price"
+msgid "New price for the product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:463
+#: src/paths/instance/products/list/Table.tsx:457
#, c-format
-msgid "There is no products yet, add more pressing the + sign"
+msgid "The are value with errors"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:458
+#, c-format
+msgid "Update product with new stock and price"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:499
+#, c-format
+msgid "There are no products yet, add more pressing the + sign"
msgstr ""
#: src/paths/instance/products/list/index.tsx:86
#, c-format
-msgid "product updated successfully"
+msgid "Jump to product with the given product ID"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:92
+#: src/paths/instance/products/list/index.tsx:87
#, c-format
-msgid "could not update the product"
+msgid "Product id"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:103
+#: src/paths/instance/products/list/index.tsx:104
#, c-format
-msgid "product delete successfully"
+msgid "Product updated successfully"
msgstr ""
#: src/paths/instance/products/list/index.tsx:109
#, c-format
-msgid "could not delete the product"
+msgid "Could not update the product"
msgstr ""
-#: src/paths/instance/products/update/UpdatePage.tsx:56
+#: src/paths/instance/products/list/index.tsx:144
#, c-format
-msgid "Product id:"
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:149
+#, c-format
+msgid "Could not delete the product"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:95
+#: src/paths/instance/products/list/index.tsx:165
#, c-format
msgid ""
-"To complete the setup of the reserve, you must now initiate a wire transfer "
-"using the given wire transfer subject and crediting the specified amount to "
-"the indicated account of the exchange."
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:102
+#: src/paths/instance/products/list/index.tsx:173
#, c-format
-msgid "If your system supports RFC 8905, you can do this by opening this URI:"
+msgid "Deleting an product can't be undone."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:83
+#: src/paths/instance/products/update/UpdatePage.tsx:56
#, c-format
-msgid "it should be greater than 0"
+msgid "Product id:"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:88
+#: src/paths/instance/products/update/index.tsx:85
#, c-format
-msgid "must be a valid URL"
+msgid "Product (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:107
+#: src/paths/instance/products/update/index.tsx:91
#, c-format
-msgid "Initial balance"
+msgid "Could not update product"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:112
#, c-format
-msgid "balance prior to deposit"
+msgid "Must be greater that 0"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:119
#, c-format
-msgid "Exchange URL"
+msgid "Too short"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:113
+#: src/paths/instance/templates/create/CreatePage.tsx:192
#, c-format
-msgid "URL of exchange"
+msgid "Identifier"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:148
+#: src/paths/instance/templates/create/CreatePage.tsx:193
#, c-format
-msgid "Next"
+msgid "Name of the template in URLs."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:186
+#: src/paths/instance/templates/create/CreatePage.tsx:199
#, c-format
-msgid "Wire method"
+msgid "Describe what this template stands for"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:187
+#: src/paths/instance/templates/create/CreatePage.tsx:206
#, c-format
-msgid "method to use for wire transfer"
+msgid "If specified, this template will create an order with the same summary"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:189
+#: src/paths/instance/templates/create/CreatePage.tsx:210
#, c-format
-msgid "Select one wire method"
+msgid "Summary is editable"
msgstr ""
-#: src/paths/instance/reserves/create/index.tsx:62
+#: src/paths/instance/templates/create/CreatePage.tsx:211
#, c-format
-msgid "could not create reserve"
+msgid "Allow the user to change the summary."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:77
+#: src/paths/instance/templates/create/CreatePage.tsx:217
#, c-format
-msgid "Valid until"
+msgid "If specified, this template will create an order with the same price"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:82
+#: src/paths/instance/templates/create/CreatePage.tsx:221
#, c-format
-msgid "Created balance"
+msgid "Amount is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:99
+#: src/paths/instance/templates/create/CreatePage.tsx:222
#, c-format
-msgid "Exchange balance"
+msgid "Allow the user to select the amount to pay."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:104
+#: src/paths/instance/templates/create/CreatePage.tsx:229
#, c-format
-msgid "Picked up"
+msgid "Currency is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:109
+#: src/paths/instance/templates/create/CreatePage.tsx:230
#, c-format
-msgid "Committed"
+msgid "Allow the user to change currency."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:116
+#: src/paths/instance/templates/create/CreatePage.tsx:232
#, c-format
-msgid "Account address"
+msgid "Supported currencies"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:233
#, c-format
-msgid "Subject"
+msgid "Supported currencies: %1$s"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:130
+#: src/paths/instance/templates/create/CreatePage.tsx:241
#, c-format
-msgid "Tips"
+msgid "Minimum age"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:193
+#: src/paths/instance/templates/create/CreatePage.tsx:243
#, c-format
-msgid "No tips has been authorized from this reserve"
+msgid "Is this contract restricted to some age?"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:213
+#: src/paths/instance/templates/create/CreatePage.tsx:247
#, c-format
-msgid "Authorized"
+msgid "Payment timeout"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:222
+#: src/paths/instance/templates/create/CreatePage.tsx:249
#, c-format
-msgid "Expiration"
+msgid ""
+"How much time the customer has to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:254
#, c-format
-msgid "amount of tip"
+msgid "OTP device"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:255
#, c-format
-msgid "Justification"
+msgid "Use to verify transaction while offline."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:114
+#: src/paths/instance/templates/create/CreatePage.tsx:257
#, c-format
-msgid "reason for the tip"
+msgid "No OTP device."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:118
+#: src/paths/instance/templates/create/CreatePage.tsx:259
#, c-format
-msgid "URL after tip"
+msgid "Add one first"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:272
#, c-format
-msgid "URL to visit after tip payment"
+msgid "No device"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:65
+#: src/paths/instance/templates/create/CreatePage.tsx:276
#, c-format
-msgid "Reserves not yet funded"
+msgid "Use to verify transaction in offline mode."
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:89
+#: src/paths/instance/templates/create/index.tsx:52
#, c-format
-msgid "Reserves ready"
+msgid "Template has been created"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:95
+#: src/paths/instance/templates/create/index.tsx:58
#, c-format
-msgid "add new reserve"
+msgid "Could not create template"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:143
+#: src/paths/instance/templates/list/Table.tsx:61
#, c-format
-msgid "Expires at"
+msgid "Templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:146
+#: src/paths/instance/templates/list/Table.tsx:66
#, c-format
-msgid "Initial"
+msgid "Add new templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:202
+#: src/paths/instance/templates/list/Table.tsx:127
#, c-format
-msgid "delete selected reserve from the database"
+msgid "Load more templates before the first one"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:210
+#: src/paths/instance/templates/list/Table.tsx:165
#, c-format
-msgid "authorize new tip from selected reserve"
+msgid "Delete selected templates from the database"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:237
+#: src/paths/instance/templates/list/Table.tsx:172
#, c-format
-msgid ""
-"There is no ready reserves yet, add more pressing the + sign or fund them"
+msgid "Use template to create new order"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:264
+#: src/paths/instance/templates/list/Table.tsx:175
#, c-format
-msgid "Expected Balance"
+msgid "Use template"
msgstr ""
-#: src/paths/instance/reserves/list/index.tsx:110
+#: src/paths/instance/templates/list/Table.tsx:179
#, c-format
-msgid "could not create the tip"
+msgid "Create qr code for the template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:77
+#: src/paths/instance/templates/list/Table.tsx:194
#, c-format
-msgid "should not be empty"
+msgid "Load more templates after the last one"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:93
+#: src/paths/instance/templates/list/Table.tsx:214
#, c-format
-msgid "should be greater that 0"
+msgid "There are no templates yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:96
+#: src/paths/instance/templates/list/index.tsx:91
#, c-format
-msgid "can't be empty"
+msgid "Jump to template with the given template ID"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:100
+#: src/paths/instance/templates/list/index.tsx:92
#, c-format
-msgid "to short"
+msgid "Template identification"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:108
+#: src/paths/instance/templates/list/index.tsx:132
#, c-format
-msgid "just letters and numbers from 2 to 7"
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:110
+#: src/paths/instance/templates/list/index.tsx:137
#, c-format
-msgid "size of the key should be 32"
+msgid "Failed to delete template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:137
+#: src/paths/instance/templates/list/index.tsx:153
#, c-format
-msgid "Identifier"
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:138
+#: src/paths/instance/templates/list/index.tsx:160
#, c-format
-msgid "Name of the template in URLs."
+msgid "Deleting an template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:144
+#: src/paths/instance/templates/list/index.tsx:162
#, c-format
-msgid "Describe what this template stands for"
+msgid "can't be undone"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:149
+#: src/paths/instance/templates/qr/QrPage.tsx:77
#, c-format
-msgid "Fixed summary"
+msgid "Print"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:150
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
#, c-format
msgid "If specified, this template will create order with the same summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:154
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
#, c-format
-msgid "Fixed price"
+msgid "If specified, this template will create orders with the same price"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:155
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
#, c-format
-msgid "If specified, this template will create order with the same price"
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:159
+#: src/paths/instance/templates/update/index.tsx:90
#, c-format
-msgid "Minimum age"
+msgid "Template (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:161
+#: src/paths/instance/templates/use/UsePage.tsx:58
#, c-format
-msgid "Is this contract restricted to some age?"
+msgid "An amount is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:165
+#: src/paths/instance/templates/use/UsePage.tsx:60
#, c-format
-msgid "Payment timeout"
+msgid "An order summary is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:167
+#: src/paths/instance/templates/use/UsePage.tsx:88
#, c-format
-msgid ""
-"How much time has the customer to complete the payment once the order was "
-"created."
+msgid "New order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:171
+#: src/paths/instance/templates/use/UsePage.tsx:110
#, c-format
-msgid "Verification algorithm"
+msgid "Amount of the order"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:172
+#: src/paths/instance/templates/use/UsePage.tsx:115
#, c-format
-msgid "Algorithm to use to verify transaction in offline mode"
+msgid "Order summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:180
+#: src/paths/instance/templates/use/index.tsx:125
#, c-format
-msgid "Point-of-sale key"
+msgid "Could not create order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:182
+#: src/paths/instance/token/DetailPage.tsx:57
#, c-format
-msgid "Useful to validate the purchase"
+msgid "You need your access token to perform the operation"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:196
+#: src/paths/instance/token/DetailPage.tsx:74
#, c-format
-msgid "generate random secret key"
+msgid "You are updating the access token from instance with id \"%1$s\""
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:203
+#: src/paths/instance/token/DetailPage.tsx:105
#, c-format
-msgid "random"
+msgid "This instance doesn't have authentication token."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:208
+#: src/paths/instance/token/DetailPage.tsx:106
#, c-format
-msgid "show secret key"
+msgid "You can leave it empty if there is another layer of security."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:209
+#: src/paths/instance/token/DetailPage.tsx:121
#, c-format
-msgid "hide secret key"
+msgid "Current access token"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:216
+#: src/paths/instance/token/DetailPage.tsx:126
#, c-format
-msgid "hide"
+msgid "Clearing the access token will mean public access to the instance."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:218
+#: src/paths/instance/token/DetailPage.tsx:142
#, c-format
-msgid "show"
+msgid "Clear token"
msgstr ""
-#: src/paths/instance/templates/create/index.tsx:52
+#: src/paths/instance/token/DetailPage.tsx:177
#, c-format
-msgid "could not inform template"
+msgid "Confirm change"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:54
+#: src/paths/instance/token/index.tsx:83
#, c-format
-msgid "Amount is required"
+msgid "Failed to clear token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:58
+#: src/paths/instance/token/index.tsx:109
#, c-format
-msgid "Order summary is required"
+msgid "Failed to set new token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:86
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
#, c-format
-msgid "New order for template"
+msgid "Slug"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:108
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
#, c-format
-msgid "Amount of the order"
+msgid "Token family slug to use in URLs (for internal use only)"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:113
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
#, c-format
-msgid "Order summary"
+msgid "Kind"
msgstr ""
-#: src/paths/instance/templates/use/index.tsx:92
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
#, c-format
-msgid "could not create order from template"
+msgid "Token family kind"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:131
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
#, c-format
-msgid ""
-"Here you can specify a default value for fields that are not fixed. Default "
-"values can be edited by the customer before the payment."
+msgid "User-readable token family name"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:148
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
#, c-format
-msgid "Fixed amount"
+msgid "Token family description for customers"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:149
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
#, c-format
-msgid "Default amount"
+msgid "Valid After"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:161
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
#, c-format
-msgid "Default summary"
+msgid "Token family can issue tokens after this date"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:177
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
#, c-format
-msgid "Print"
+msgid "Valid Before"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:184
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
#, c-format
-msgid "Setup TOTP"
+msgid "Token family can issue tokens until this date"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:65
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
#, c-format
-msgid "Templates"
+msgid "Duration"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:70
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
#, c-format
-msgid "add new templates"
+msgid "Validity duration of a issued token"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:142
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
#, c-format
-msgid "load more templates before the first one"
+msgid "Token familty created successfully"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:146
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
#, c-format
-msgid "load newer templates"
+msgid "Could not create token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:181
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
#, c-format
-msgid "delete selected templates from the database"
+msgid "Token Families"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:188
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
#, c-format
-msgid "use template to create new order"
+msgid "Add token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:195
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
#, c-format
-msgid "create qr code for the template"
+msgid "Go to token family update page"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:210
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
#, c-format
-msgid "load more templates after the last one"
+msgid "Remove this token family from the database"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:214
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
#, c-format
-msgid "load older templates"
+msgid ""
+"There are no token families yet, add the first one by pressing the + sign."
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:231
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
#, c-format
-msgid "There is no templates yet, add more pressing the + sign"
+msgid "Token family updated successfully"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:104
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
#, c-format
-msgid "template delete successfully"
+msgid "Could not update the token family"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:110
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
#, c-format
-msgid "could not delete the template"
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/update/index.tsx:90
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
#, c-format
-msgid "could not update template"
+msgid "Failed to delete token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:57
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
#, c-format
-msgid "should be one of '%1$s'"
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
#, c-format
-msgid "Webhook ID to use"
+msgid "Deleting a token family %1$s ."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
#, c-format
-msgid "Event"
+msgid "Token Family: %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:90
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
#, c-format
-msgid "The event of the webhook: why the webhook is used"
+msgid "Could not update token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:94
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
#, c-format
-msgid "Method"
+msgid "Check the id, does not look valid"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
#, c-format
-msgid "Method used by the webhook"
+msgid "Must have 52 characters, current %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
#, c-format
-msgid "URL"
+msgid "URL doesn't have the right format"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
#, c-format
-msgid "URL of the webhook where the customer will be redirected"
+msgid "Credited bank account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
#, c-format
-msgid "Header"
+msgid "Select an account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:106
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
#, c-format
-msgid "Header template of the webhook"
+msgid "Bank account of the merchant where the payment was received"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:111
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
#, c-format
-msgid "Body"
+msgid "Wire transfer ID"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
#, c-format
-msgid "Body template by the webhook"
+msgid ""
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
+"characters long"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:61
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
#, c-format
-msgid "Webhooks"
+msgid "Exchange URL"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:66
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
#, c-format
-msgid "add new webhooks"
+msgid ""
+"Base URL of the exchange that made the transfer, should have been in the "
+"wire transfer subject"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:137
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
#, c-format
-msgid "load more webhooks before the first one"
+msgid "Amount credited"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:141
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
#, c-format
-msgid "load newer webhooks"
+msgid "Actual amount that was wired to the merchant's bank account"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:151
+#: src/paths/instance/transfers/create/index.tsx:62
#, c-format
-msgid "Event type"
+msgid "Wire transfer informed successfully"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:176
+#: src/paths/instance/transfers/create/index.tsx:68
#, c-format
-msgid "delete selected webhook from the database"
+msgid "Could not inform transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:198
+#: src/paths/instance/transfers/list/Table.tsx:62
#, c-format
-msgid "load more webhooks after the last one"
+msgid "Transfers"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:202
+#: src/paths/instance/transfers/list/Table.tsx:67
#, c-format
-msgid "load older webhooks"
+msgid "Add new transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:219
+#: src/paths/instance/transfers/list/Table.tsx:120
#, c-format
-msgid "There is no webhooks yet, add more pressing the + sign"
+msgid "Load more transfers before the first one"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:94
+#: src/paths/instance/transfers/list/Table.tsx:133
#, c-format
-msgid "webhook delete successfully"
+msgid "Credit"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:136
#, c-format
-msgid "could not delete the webhook"
+msgid "Confirmed"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:63
+#: src/paths/instance/transfers/list/Table.tsx:139
#, c-format
-msgid "check the id, does not look valid"
+msgid "Verified"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:65
+#: src/paths/instance/transfers/list/Table.tsx:142
#, c-format
-msgid "should have 52 characters, current %1$s"
+msgid "Executed on"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:72
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "URL doesn't have the right format"
+msgid "yes"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "Credited bank account"
+msgid "no"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:158
#, c-format
-msgid "Select one account"
+msgid "never"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:101
+#: src/paths/instance/transfers/list/Table.tsx:163
#, c-format
-msgid "Bank account of the merchant where the payment was received"
+msgid "unknown"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:105
+#: src/paths/instance/transfers/list/Table.tsx:169
#, c-format
-msgid "Wire transfer ID"
+msgid "Delete selected transfer from the database"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:107
+#: src/paths/instance/transfers/list/Table.tsx:184
#, c-format
-msgid ""
-"unique identifier of the wire transfer used by the exchange, must be 52 "
-"characters long"
+msgid "Load more transfers after the last one"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/list/Table.tsx:204
#, c-format
-msgid ""
-"Base URL of the exchange that made the transfer, should have been in the "
-"wire transfer subject"
+msgid "There are no transfers yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:117
+#: src/paths/instance/transfers/list/ListPage.tsx:83
#, c-format
-msgid "Amount credited"
+msgid "All accounts"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:118
+#: src/paths/instance/transfers/list/ListPage.tsx:84
#, c-format
-msgid "Actual amount that was wired to the merchant's bank account"
+msgid "Filter by account address"
msgstr ""
-#: src/paths/instance/transfers/create/index.tsx:58
+#: src/paths/instance/transfers/list/ListPage.tsx:105
#, c-format
-msgid "could not inform transfer"
+msgid "Only show wire transfers confirmed by the merchant"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:61
+#: src/paths/instance/transfers/list/ListPage.tsx:115
#, c-format
-msgid "Transfers"
+msgid "Only show wire transfers claimed by the exchange"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:66
+#: src/paths/instance/transfers/list/ListPage.tsx:118
#, c-format
-msgid "add new transfer"
+msgid "Unverified"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:129
+#: src/paths/instance/transfers/list/index.tsx:118
#, c-format
-msgid "load more transfers before the first one"
+msgid "Wire transfer \"%1$s...\" has been deleted"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:133
+#: src/paths/instance/transfers/list/index.tsx:123
#, c-format
-msgid "load newer transfers"
+msgid "Failed to delete transfer"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:143
+#: src/paths/admin/create/CreatePage.tsx:86
#, c-format
-msgid "Credit"
+msgid "Must be business or individual"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:152
+#: src/paths/admin/create/CreatePage.tsx:104
#, c-format
-msgid "Confirmed"
+msgid "Pay delay can't be greater than wire transfer delay"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:155
+#: src/paths/admin/create/CreatePage.tsx:112
#, c-format
-msgid "Verified"
+msgid "Max 7 lines"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:158
+#: src/paths/admin/create/CreatePage.tsx:138
#, c-format
-msgid "Executed at"
+msgid "Doesn't match"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:215
#, c-format
-msgid "yes"
+msgid "Enable access control"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:216
#, c-format
-msgid "no"
+msgid "Choose if the backend server should authenticate access."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:181
+#: src/paths/admin/create/CreatePage.tsx:243
#, c-format
-msgid "unknown"
+msgid "Access control is not yet decided. This instance can't be created."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:187
+#: src/paths/admin/create/CreatePage.tsx:250
#, c-format
-msgid "delete selected transfer from the database"
+msgid "Authorization must be handled externally."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:202
+#: src/paths/admin/create/CreatePage.tsx:256
#, c-format
-msgid "load more transfer after the last one"
+msgid "Authorization is handled by the backend server."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:206
+#: src/paths/admin/create/CreatePage.tsx:274
#, c-format
-msgid "load older transfers"
+msgid "Need to complete marked fields and choose authorization method"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:223
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
#, c-format
-msgid "There is no transfer yet, add more pressing the + sign"
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:79
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "filter by account address"
+msgid "Business name"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:100
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
#, c-format
-msgid "only show wire transfers confirmed by the merchant"
+msgid "Legal name of the business represented by this instance."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:110
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
#, c-format
-msgid "only show wire transfers claimed by the exchange"
+msgid "Email"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:113
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
#, c-format
-msgid "Unverified"
+msgid "Contact email"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:69
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
#, c-format
-msgid "is not valid"
+msgid "Website URL"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:94
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
#, c-format
-msgid "is not a number"
+msgid "URL."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:96
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
#, c-format
-msgid "must be 1 or greater"
+msgid "Logo"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:107
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
#, c-format
-msgid "max 7 lines"
+msgid "Logo image."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:178
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
#, c-format
-msgid "change authorization configuration"
+msgid "Physical location of the merchant."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:217
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
#, c-format
-msgid "Need to complete marked fields and choose authorization method"
+msgid "Jurisdiction"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:82
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
#, c-format
-msgid "This is not a valid bitcoin address."
+msgid "Jurisdiction for legal disputes with the merchant."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:95
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
#, c-format
-msgid "This is not a valid Ethereum address."
+msgid "Pay transaction fee"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:118
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
#, c-format
-msgid "IBAN numbers usually have more that 4 digits"
+msgid "Assume the cost of the transaction of let the user pay for it."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:120
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
#, c-format
-msgid "IBAN numbers usually have less that 34 digits"
+msgid "Default payment delay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:128
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
#, c-format
-msgid "IBAN country code not found"
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:153
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#, c-format
+msgid "Default wire transfer delay"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
#, c-format
-msgid "IBAN number is not valid, checksum is wrong"
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:248
+#: src/paths/instance/update/UpdatePage.tsx:124
#, c-format
-msgid "Target type"
+msgid "Instance id"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:249
+#: src/paths/instance/update/index.tsx:108
#, c-format
-msgid "Method to use for wire transfer"
+msgid "Failed to update instance"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:258
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
#, c-format
-msgid "Routing"
+msgid "Must be \"pay\" or \"refund\""
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:259
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
#, c-format
-msgid "Routing number."
+msgid "Must be one of '%1$s'"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:263
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
#, c-format
-msgid "Account"
+msgid "Webhook ID to use"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:264
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
#, c-format
-msgid "Account number."
+msgid "Event"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:273
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
#, c-format
-msgid "Business Identifier Code."
+msgid "Pay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:282
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
#, c-format
-msgid "Bank Account Number."
+msgid "The event of the webhook: why the webhook is used"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:292
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
#, c-format
-msgid "Unified Payment Interface."
+msgid "Method"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:301
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
#, c-format
-msgid "Bitcoin protocol."
+msgid "GET"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:310
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
#, c-format
-msgid "Ethereum protocol."
+msgid "POST"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:319
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
#, c-format
-msgid "Interledger protocol."
+msgid "PUT"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:328
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
#, c-format
-msgid "Host"
+msgid "PATCH"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:329
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
#, c-format
-msgid "Bank host."
+msgid "HEAD"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:334
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
#, c-format
-msgid "Bank account."
+msgid "Method used by the webhook"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:343
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
#, c-format
-msgid "Bank account owner's name."
+msgid "URL"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:370
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
#, c-format
-msgid "No accounts yet."
+msgid "URL of the webhook where the customer will be redirected"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:52
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
#, c-format
msgid ""
-"Name of the instance in URLs. The 'default' instance is special in that it "
-"is used to administer other instances."
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:58
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
#, c-format
-msgid "Business name"
+msgid "For example %1$s will be replaced with the the order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
#, c-format
-msgid "Legal name of the business represented by this instance."
+msgid "The short list of variables are:"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:64
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
#, c-format
-msgid "Email"
+msgid "order's description"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:65
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
#, c-format
-msgid "Contact email"
+msgid "order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:70
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
#, c-format
-msgid "Website URL"
+msgid "order's unique identification"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:71
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
#, c-format
-msgid "URL."
+msgid "the amount that was being refunded"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:76
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
#, c-format
-msgid "Logo"
+msgid "the reason entered by the merchant staff for granting the refund"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:77
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
#, c-format
-msgid "Logo image."
+msgid "time of the refund in nanoseconds since 1970"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:82
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
#, c-format
-msgid "Bank account"
+msgid "Http body"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:83
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
#, c-format
-msgid "URI specifying bank account for crediting revenue."
+msgid "Body template by the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:88
+#: src/paths/instance/webhooks/create/index.tsx:52
#, c-format
-msgid "Default max deposit fee"
+msgid "Webhook create successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:89
+#: src/paths/instance/webhooks/create/index.tsx:58
#, c-format
-msgid ""
-"Maximum deposit fees this merchant is willing to pay per order by default."
+msgid "Could not create the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#: src/paths/instance/webhooks/create/index.tsx:66
#, c-format
-msgid "Default max wire fee"
+msgid "Could not create webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:95
+#: src/paths/instance/webhooks/list/Table.tsx:57
#, c-format
-msgid ""
-"Maximum wire fees this merchant is willing to pay per wire transfer by "
-"default."
+msgid "Webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:100
+#: src/paths/instance/webhooks/list/Table.tsx:62
#, c-format
-msgid "Default wire fee amortization"
+msgid "Add new webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#: src/paths/instance/webhooks/list/Table.tsx:117
#, c-format
-msgid ""
-"Number of orders excess wire transfer fees will be divided by to compute per "
-"order surcharge."
+msgid "Load more webhooks before the first one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#: src/paths/instance/webhooks/list/Table.tsx:130
#, c-format
-msgid "Physical location of the merchant."
+msgid "Event type"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#: src/paths/instance/webhooks/list/Table.tsx:155
#, c-format
-msgid "Jurisdiction"
+msgid "Delete selected webhook from the database"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#: src/paths/instance/webhooks/list/Table.tsx:170
#, c-format
-msgid "Jurisdiction for legal disputes with the merchant."
+msgid "Load more webhooks after the last one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:122
+#: src/paths/instance/webhooks/list/Table.tsx:190
#, c-format
-msgid "Default payment delay"
+msgid "There are no webhooks yet, add more pressing the + sign"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:124
+#: src/paths/instance/webhooks/list/index.tsx:88
#, c-format
-msgid ""
-"Time customers have to pay an order before the offer expires by default."
+msgid "Webhook delete successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:129
+#: src/paths/instance/webhooks/list/index.tsx:93
#, c-format
-msgid "Default wire transfer delay"
+msgid "Could not delete the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:130
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
#, c-format
-msgid ""
-"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
-"enabling it to aggregate smaller payments into larger wire transfers and "
-"reducing wire fees."
+msgid "Header"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:164
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
#, c-format
-msgid "Instance id"
+msgid "Header template of the webhook"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:173
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
#, c-format
-msgid "Change the authorization method use for this instance."
+msgid "Body"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:182
+#: src/paths/instance/webhooks/update/index.tsx:88
#, c-format
-msgid "Manage access token"
+msgid "Webhook updated"
msgstr ""
-#: src/paths/instance/update/index.tsx:112
+#: src/paths/instance/webhooks/update/index.tsx:94
#, c-format
-msgid "Failed to create instance"
+msgid "Could not update webhook"
msgstr ""
-#: src/components/exception/login.tsx:74
+#: src/paths/settings/index.tsx:73
#, c-format
-msgid "Login required"
+msgid "Language"
msgstr ""
-#: src/components/exception/login.tsx:80
+#: src/paths/settings/index.tsx:89
#, c-format
-msgid "Please enter your access token."
+msgid "Advance order creation"
msgstr ""
-#: src/components/exception/login.tsx:108
+#: src/paths/settings/index.tsx:90
#, c-format
-msgid "Access Token"
+msgid "Shows more options in the order creation form"
msgstr ""
-#: src/InstanceRoutes.tsx:171
+#: src/paths/settings/index.tsx:94
#, c-format
-msgid "The request to the backend take too long and was cancelled"
+msgid "Advance instance settings"
msgstr ""
-#: src/InstanceRoutes.tsx:172
+#: src/paths/settings/index.tsx:95
#, c-format
-msgid "Diagnostic from %1$s is \"%2$s\""
+msgid "Shows more options in the instance settings form"
msgstr ""
-#: src/InstanceRoutes.tsx:178
+#: src/paths/settings/index.tsx:100
#, c-format
-msgid "The backend reported a problem: HTTP status #%1$s"
+msgid "Date format"
msgstr ""
-#: src/InstanceRoutes.tsx:179
+#: src/paths/settings/index.tsx:118
#, c-format
-msgid "Diagnostic from %1$s is '%2$s'"
+msgid "How the date is going to be displayed"
msgstr ""
-#: src/InstanceRoutes.tsx:196
+#: src/paths/settings/index.tsx:121
#, c-format
-msgid "Access denied"
+msgid "Developer mode"
msgstr ""
-#: src/InstanceRoutes.tsx:197
+#: src/paths/settings/index.tsx:122
#, c-format
-msgid "The access token provided is invalid."
+msgid ""
+"Shows more options and tools which are not intended for general audience."
msgstr ""
-#: src/InstanceRoutes.tsx:212
+#: src/paths/instance/categories/list/Table.tsx:133
#, c-format
-msgid "No 'default' instance configured yet."
+msgid "Total products"
msgstr ""
-#: src/InstanceRoutes.tsx:213
+#: src/paths/instance/categories/list/Table.tsx:164
#, c-format
-msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgid "Delete selected category from the database"
msgstr ""
-#: src/InstanceRoutes.tsx:630
+#: src/paths/instance/categories/list/Table.tsx:199
#, c-format
-msgid "The access token provided is invalid"
+msgid "There are no categories yet, add more pressing the + sign"
msgstr ""
-#: src/InstanceRoutes.tsx:664
+#: src/paths/instance/categories/list/index.tsx:90
#, c-format
-msgid "Hide for today"
+msgid "Category delete successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:82
+#: src/paths/instance/categories/list/index.tsx:95
#, c-format
-msgid "Instance"
+msgid "Could not delete the category"
msgstr ""
-#: src/components/menu/SideBar.tsx:91
+#: src/paths/instance/categories/create/CreatePage.tsx:75
#, c-format
-msgid "Settings"
+msgid "Category name"
msgstr ""
-#: src/components/menu/SideBar.tsx:167
+#: src/paths/instance/categories/create/index.tsx:53
#, c-format
-msgid "Connection"
+msgid "Category added successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:209
+#: src/paths/instance/categories/create/index.tsx:59
#, c-format
-msgid "New"
+msgid "Could not add category"
msgstr ""
-#: src/components/menu/SideBar.tsx:219
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
#, c-format
-msgid "List"
+msgid "Id:"
msgstr ""
-#: src/components/menu/SideBar.tsx:234
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
#, c-format
-msgid "Log out"
+msgid "Name of the category"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
+#, c-format
+msgid "Products"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
+#, c-format
+msgid "Search by product description or id"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:71
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
#, c-format
-msgid "Check your token is valid"
+msgid "Products that this category will list."
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:90
+#: src/paths/instance/categories/update/index.tsx:93
#, c-format
-msgid "Couldn't access the server."
+msgid "Could not update category"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:91
+#: src/paths/instance/categories/update/index.tsx:95
#, c-format
-msgid "Could not infer instance id from url %1$s"
+msgid "Category id is unknown"
msgstr ""
-#: src/Application.tsx:104
+#: src/Routing.tsx:665
#, c-format
-msgid "Server not found"
+msgid "Without this the merchant backend will refuse to create new orders."
msgstr ""
-#: src/Application.tsx:118
+#: src/Routing.tsx:675
#, c-format
-msgid "Server response with an error code"
+msgid "Hide for today"
msgstr ""
-#: src/Application.tsx:120
+#: src/Routing.tsx:711
#, c-format
-msgid "Got message %1$s from %2$s"
+msgid "KYC verification needed"
msgstr ""
-#: src/Application.tsx:131
+#: src/Routing.tsx:715
#, c-format
-msgid "Response from server is unreadable, http status: %1$s"
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
msgstr ""
-#: src/Application.tsx:144
+#: src/components/menu/SideBar.tsx:167
#, c-format
-msgid "Unexpected Error"
+msgid "Configuration"
msgstr ""
-#: src/components/form/InputArray.tsx:101
+#: src/components/menu/SideBar.tsx:206
#, c-format
-msgid "The value %1$s is invalid for a payment url"
+msgid "Settings"
msgstr ""
-#: src/components/form/InputArray.tsx:110
+#: src/components/menu/SideBar.tsx:216
#, c-format
-msgid "add element to the list"
+msgid "Access token"
msgstr ""
-#: src/components/form/InputArray.tsx:112
+#: src/components/menu/SideBar.tsx:224
#, c-format
-msgid "add"
+msgid "Connection"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:233
+#, c-format
+msgid "Interface"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:274
+#, c-format
+msgid "List"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:293
+#, c-format
+msgid "Log out"
+msgstr ""
+
+#: src/paths/admin/create/index.tsx:54
+#, c-format
+msgid "Failed to create instance"
+msgstr ""
+
+#: src/Application.tsx:208
+#, c-format
+msgid "checking compatibility with server..."
+msgstr ""
+
+#: src/Application.tsx:217
+#, c-format
+msgid "Contacting the server failed"
+msgstr ""
+
+#: src/Application.tsx:229
+#, c-format
+msgid "The server version is not supported"
+msgstr ""
+
+#: src/Application.tsx:230
+#, c-format
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
msgstr ""
#: src/components/form/InputSecured.tsx:37
@@ -2730,12 +3671,22 @@ msgstr ""
msgid "Changing"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:87
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr ""
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, c-format
+msgid "Business Name"
+msgstr ""
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
#, c-format
msgid "Order ID"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:101
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
#, c-format
msgid "Payment URL"
msgstr ""
diff --git a/packages/merchant-backoffice-ui/src/i18n/taler-merchant-backoffice.pot b/packages/merchant-backoffice-ui/src/i18n/taler-merchant-backoffice.pot
index 5ef56ca05..181d4d4bc 100644
--- a/packages/merchant-backoffice-ui/src/i18n/taler-merchant-backoffice.pot
+++ b/packages/merchant-backoffice-ui/src/i18n/taler-merchant-backoffice.pot
@@ -25,152 +25,440 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/components/modal/index.tsx:71
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid "A lot of request were made to the same server and this action was throttled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr ""
+
+#: src/components/modal/index.tsx:81
#, c-format
msgid "Cancel"
msgstr ""
-#: src/components/modal/index.tsx:79
+#: src/components/modal/index.tsx:89
#, c-format
msgid "%1$s"
msgstr ""
-#: src/components/modal/index.tsx:84
+#: src/components/modal/index.tsx:94
#, c-format
msgid "Close"
msgstr ""
-#: src/components/modal/index.tsx:124
+#: src/components/modal/index.tsx:134
#, c-format
msgid "Continue"
msgstr ""
-#: src/components/modal/index.tsx:178
+#: src/components/modal/index.tsx:194
#, c-format
msgid "Clear"
msgstr ""
-#: src/components/modal/index.tsx:190
+#: src/components/modal/index.tsx:206
#, c-format
msgid "Confirm"
msgstr ""
-#: src/components/modal/index.tsx:296
+#: src/components/modal/index.tsx:248
#, c-format
-msgid "is not the same as the current access token"
+msgid "Required"
msgstr ""
-#: src/components/modal/index.tsx:299
+#: src/components/modal/index.tsx:250
#, c-format
-msgid "cannot be empty"
+msgid "Letter must be a JSON string"
msgstr ""
-#: src/components/modal/index.tsx:301
+#: src/components/modal/index.tsx:252
#, c-format
-msgid "cannot be the same as the old token"
+msgid "JSON string is invalid"
msgstr ""
-#: src/components/modal/index.tsx:305
+#: src/components/modal/index.tsx:257
#, c-format
-msgid "is not the same"
+msgid "Import"
msgstr ""
-#: src/components/modal/index.tsx:315
+#: src/components/modal/index.tsx:258
#, c-format
-msgid "You are updating the access token from instance with id %1$s"
+msgid "Importing an account from the bank"
msgstr ""
-#: src/components/modal/index.tsx:331
+#: src/components/modal/index.tsx:265
#, c-format
-msgid "Old access token"
+msgid ""
+"You can export your account settings from the Libeufin Bank's account profile. "
+"Paste the content in the next field."
msgstr ""
-#: src/components/modal/index.tsx:332
+#: src/components/modal/index.tsx:273
#, c-format
-msgid "access token currently in use"
+msgid "Account information"
msgstr ""
#: src/components/modal/index.tsx:338
#, c-format
-msgid "New access token"
+msgid "Correct form"
msgstr ""
#: src/components/modal/index.tsx:339
#, c-format
-msgid "next access token to be used"
+msgid "Comparing account details"
+msgstr ""
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr ""
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr ""
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr ""
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr ""
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr ""
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr ""
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr ""
+
+#: src/components/modal/index.tsx:402
+#, c-format
+msgid "Account id"
+msgstr ""
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr ""
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr ""
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
msgstr ""
-#: src/components/modal/index.tsx:344
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr ""
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr ""
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr ""
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that you "
+"are the owner of the account."
+msgstr ""
+
+#: src/components/modal/index.tsx:487
+#, c-format
+msgid "Step 1:"
+msgstr ""
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking app "
+"or bank website"
+msgstr ""
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr ""
+
+#: src/components/modal/index.tsx:499
+#, c-format
+msgid "Step 2:"
+msgstr ""
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your banking "
+"app or website"
+msgstr ""
+
+#: src/components/modal/index.tsx:509
+#, c-format
+msgid "Receiver name"
+msgstr ""
+
+#: src/components/modal/index.tsx:514
+#, c-format
+msgid "Step 3:"
+msgstr ""
+
+#: src/components/modal/index.tsx:516
+#, c-format
+msgid "Finish the wire transfer setting smallest amount in your banking app or website."
+msgstr ""
+
+#: src/components/modal/index.tsx:536
+#, c-format
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
+msgstr ""
+
+#: src/components/modal/index.tsx:549
+#, c-format
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s link "
+"instead"
+msgstr ""
+
+#: src/components/modal/index.tsx:694
+#, c-format
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no longer be "
+"able to process orders or refunds"
+msgstr ""
+
+#: src/components/modal/index.tsx:701
+#, c-format
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
+msgstr ""
+
+#: src/components/modal/index.tsx:708
+#, c-format
+msgid "Deleting an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
+msgstr ""
+
+#: src/components/modal/index.tsx:743
+#, c-format
+msgid ""
+"The instance will disappear from your list, and you will no longer be able to "
+"access it&apos;s data."
+msgstr ""
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:786
+#, c-format
+msgid "Is not the same as the current access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:791
+#, c-format
+msgid "Can't be the same as the old token"
+msgstr ""
+
+#: src/components/modal/index.tsx:795
+#, c-format
+msgid "Is not the same"
+msgstr ""
+
+#: src/components/modal/index.tsx:803
+#, c-format
+msgid "You are updating the access token for the instance with id %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:819
+#, c-format
+msgid "Old access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:820
+#, c-format
+msgid "Access token currently in use"
+msgstr ""
+
+#: src/components/modal/index.tsx:826
+#, c-format
+msgid "New access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:827
+#, c-format
+msgid "Next access token to be used"
+msgstr ""
+
+#: src/components/modal/index.tsx:832
#, c-format
msgid "Repeat access token"
msgstr ""
-#: src/components/modal/index.tsx:345
+#: src/components/modal/index.tsx:833
#, c-format
-msgid "confirm the same access token"
+msgid "Confirm the same access token"
msgstr ""
-#: src/components/modal/index.tsx:350
+#: src/components/modal/index.tsx:838
#, c-format
msgid "Clearing the access token will mean public access to the instance"
msgstr ""
-#: src/components/modal/index.tsx:377
+#: src/components/modal/index.tsx:865
#, c-format
-msgid "cannot be the same as the old access token"
+msgid "Can't be the same as the old access token"
msgstr ""
-#: src/components/modal/index.tsx:394
+#: src/components/modal/index.tsx:880
#, c-format
msgid "You are setting the access token for the new instance"
msgstr ""
-#: src/components/modal/index.tsx:420
+#: src/components/modal/index.tsx:906
#, c-format
msgid "With external authorization method no check will be done by the merchant backend"
msgstr ""
-#: src/components/modal/index.tsx:436
+#: src/components/modal/index.tsx:922
#, c-format
msgid "Set external authorization"
msgstr ""
-#: src/components/modal/index.tsx:448
+#: src/components/modal/index.tsx:934
#, c-format
msgid "Set access token"
msgstr ""
-#: src/components/modal/index.tsx:470
+#: src/components/modal/index.tsx:956
#, c-format
msgid "Operation in progress..."
msgstr ""
-#: src/components/modal/index.tsx:479
+#: src/components/modal/index.tsx:965
#, c-format
msgid "The operation will be automatically canceled after %1$s seconds"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:80
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr ""
+
+#: src/paths/login/index.tsx:70
+#, c-format
+msgid "Your instance cannot be found"
+msgstr ""
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr ""
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr ""
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:79
#, c-format
msgid "Instances"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:93
+#: src/paths/admin/list/TableActive.tsx:92
#, c-format
msgid "Delete"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:99
+#: src/paths/admin/list/TableActive.tsx:98
#, c-format
-msgid "add new instance"
+msgid "Add new instance"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:178
+#: src/paths/admin/list/TableActive.tsx:175
#, c-format
msgid "ID"
msgstr ""
-#: src/paths/admin/list/TableActive.tsx:181
+#: src/paths/admin/list/TableActive.tsx:178
#, c-format
msgid "Name"
msgstr ""
@@ -187,132 +475,588 @@ msgstr ""
#: src/paths/admin/list/TableActive.tsx:261
#, c-format
-msgid "There is no instances yet, add more pressing the + sign"
+msgid "There are no instances yet, add more pressing the + sign"
msgstr ""
-#: src/paths/admin/list/View.tsx:68
+#: src/paths/admin/list/View.tsx:66
#, c-format
msgid "Only show active instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:71
+#: src/paths/admin/list/View.tsx:69
#, c-format
msgid "Active"
msgstr ""
-#: src/paths/admin/list/View.tsx:78
+#: src/paths/admin/list/View.tsx:76
#, c-format
msgid "Only show deleted instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:81
+#: src/paths/admin/list/View.tsx:79
#, c-format
msgid "Deleted"
msgstr ""
-#: src/paths/admin/list/View.tsx:88
+#: src/paths/admin/list/View.tsx:86
#, c-format
msgid "Show all instances"
msgstr ""
-#: src/paths/admin/list/View.tsx:91
+#: src/paths/admin/list/View.tsx:89
#, c-format
msgid "All"
msgstr ""
-#: src/paths/admin/list/index.tsx:101
+#: src/paths/admin/list/index.tsx:100
#, c-format
msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/admin/list/index.tsx:106
+#: src/paths/admin/list/index.tsx:105
#, c-format
msgid "Failed to delete instance"
msgstr ""
-#: src/paths/admin/list/index.tsx:124
+#: src/paths/admin/list/index.tsx:140
#, c-format
-msgid "Instance '%1$s' (ID: %2$s) has been disabled"
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
msgstr ""
-#: src/paths/admin/list/index.tsx:129
+#: src/paths/admin/list/index.tsx:145
#, c-format
msgid "Failed to purge instance"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:41
+#: src/components/exception/AsyncButton.tsx:43
#, c-format
-msgid "Pending KYC verification"
+msgid "Loading..."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:66
+#: src/components/form/InputPaytoForm.tsx:86
#, c-format
-msgid "Timed out"
+msgid "This is not a valid bitcoin address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:103
+#: src/components/form/InputPaytoForm.tsx:99
#, c-format
-msgid "Exchange"
+msgid "This is not a valid Ethereum address."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:106
+#: src/components/form/InputPaytoForm.tsx:128
#, c-format
-msgid "Target account"
+msgid "This is not a valid host."
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:109
+#: src/components/form/InputPaytoForm.tsx:151
#, c-format
-msgid "KYC URL"
+msgid "IBAN numbers usually have more that 4 digits"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:144
+#: src/components/form/InputPaytoForm.tsx:153
+#, c-format
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:330
#, c-format
msgid "Code"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:147
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, c-format
+msgid "International Bank Account Number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, c-format
+msgid "Invalid url"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't check "
+"that the account is the same."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL below "
+"to keep the revenue information in sync."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire transfers "
+"to this account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, c-format
+msgid "Auth type"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, c-format
+msgid "With token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, c-format
+msgid "Do not change"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, c-format
+msgid "Not verified"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, c-format
+msgid "Confirm operation"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, c-format
+msgid "Account details"
+msgstr ""
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr ""
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, c-format
+msgid "Could not create account"
+msgstr ""
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr ""
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, c-format
+msgid "Bank accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, c-format
+msgid "Add new account"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, c-format
+msgid "Wire method: Bitcoin"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, c-format
+msgid "Delete selected accounts from the database"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, c-format
+msgid "Wire method: x-taler-bank"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, c-format
+msgid "Account name"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, c-format
+msgid "Wire method: IBAN"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, c-format
+msgid "Other accounts"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format
+msgid "Reason"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:140
+#, c-format
+msgid "The exchange require a account verification."
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
#, c-format
msgid "Http Status"
msgstr ""
-#: src/paths/instance/kyc/list/ListPage.tsx:177
+#: src/paths/instance/kyc/list/ListPage.tsx:199
#, c-format
msgid "No pending kyc verification!"
msgstr ""
-#: src/components/form/InputDate.tsx:123
+#: src/components/form/InputDate.tsx:127
#, c-format
-msgid "change value to unknown date"
+msgid "Change value to unknown date"
msgstr ""
-#: src/components/form/InputDate.tsx:124
+#: src/components/form/InputDate.tsx:128
#, c-format
-msgid "change value to empty"
+msgid "Change value to empty"
msgstr ""
-#: src/components/form/InputDate.tsx:131
+#: src/components/form/InputDate.tsx:140
#, c-format
-msgid "clear"
+msgid "Change value to never"
msgstr ""
-#: src/components/form/InputDate.tsx:136
+#: src/components/form/InputDate.tsx:145
#, c-format
-msgid "change value to never"
+msgid "Never"
msgstr ""
-#: src/components/form/InputDate.tsx:141
+#: src/components/picker/DurationPicker.tsx:55
#, c-format
-msgid "never"
+msgid "days"
msgstr ""
-#: src/components/form/InputLocation.tsx:29
+#: src/components/picker/DurationPicker.tsx:65
#, c-format
-msgid "Country"
+msgid "hours"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:76
+#, c-format
+msgid "minutes"
msgstr ""
-#: src/components/form/InputLocation.tsx:33
+#: src/components/picker/DurationPicker.tsx:87
#, c-format
-msgid "Address"
+msgid "seconds"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:62
+#, c-format
+msgid "Forever"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr ""
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
msgstr ""
#: src/components/form/InputLocation.tsx:39
@@ -355,125 +1099,140 @@ msgstr ""
msgid "Country subdivision"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:66
-#, c-format
-msgid "Product id"
-msgstr ""
-
-#: src/components/form/InputSearchProduct.tsx:69
+#: src/components/form/InputSearchOnList.tsx:80
#, c-format
msgid "Description"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:94
+#: src/components/form/InputSearchOnList.tsx:106
#, c-format
-msgid "Product"
+msgid "Enter description or id"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:95
+#: src/components/form/InputSearchOnList.tsx:164
#, c-format
-msgid "search products by it's description or id"
+msgid "no match found with that description or id"
msgstr ""
-#: src/components/form/InputSearchProduct.tsx:151
-#, c-format
-msgid "no products found with that description"
-msgstr ""
-
-#: src/components/product/InventoryProductForm.tsx:56
+#: src/components/product/InventoryProductForm.tsx:57
#, c-format
msgid "You must enter a valid product identifier."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:64
+#: src/components/product/InventoryProductForm.tsx:65
#, c-format
msgid "Quantity must be greater than 0!"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:76
+#: src/components/product/InventoryProductForm.tsx:77
#, c-format
msgid ""
"This quantity exceeds remaining stock. Currently, only %1$s units remain "
"unreserved in stock."
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:109
+#: src/components/product/InventoryProductForm.tsx:100
+#, c-format
+msgid "Search product"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:112
#, c-format
msgid "Quantity"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:110
+#: src/components/product/InventoryProductForm.tsx:113
#, c-format
-msgid "how many products will be added"
+msgid "How many products will be added"
msgstr ""
-#: src/components/product/InventoryProductForm.tsx:117
+#: src/components/product/InventoryProductForm.tsx:120
#, c-format
msgid "Add from inventory"
msgstr ""
-#: src/components/form/InputImage.tsx:105
+#: src/components/form/InputImage.tsx:107
#, c-format
-msgid "Image should be smaller than 1 MB"
+msgid "Image must be smaller than 1 MB"
msgstr ""
-#: src/components/form/InputImage.tsx:110
+#: src/components/form/InputImage.tsx:112
#, c-format
msgid "Add"
msgstr ""
-#: src/components/form/InputImage.tsx:115
+#: src/components/form/InputImage.tsx:122
#, c-format
msgid "Remove"
msgstr ""
-#: src/components/form/InputTaxes.tsx:113
+#: src/components/form/InputTaxes.tsx:47
+#, c-format
+msgid "Invalid"
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:103
#, c-format
msgid "No taxes configured for this product."
msgstr ""
-#: src/components/form/InputTaxes.tsx:119
+#: src/components/form/InputTaxes.tsx:109
#, c-format
msgid "Amount"
msgstr ""
-#: src/components/form/InputTaxes.tsx:120
+#: src/components/form/InputTaxes.tsx:110
#, c-format
msgid ""
"Taxes can be in currencies that differ from the main currency used by the "
"merchant."
msgstr ""
-#: src/components/form/InputTaxes.tsx:122
+#: src/components/form/InputTaxes.tsx:112
#, c-format
msgid "Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
msgstr ""
-#: src/components/form/InputTaxes.tsx:131
+#: src/components/form/InputTaxes.tsx:121
#, c-format
msgid "Legal name of the tax, e.g. VAT or import duties."
msgstr ""
-#: src/components/form/InputTaxes.tsx:137
+#: src/components/form/InputTaxes.tsx:127
#, c-format
-msgid "add tax to the tax list"
+msgid "Add tax to the tax list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:72
+#: src/components/product/NonInventoryProductForm.tsx:71
#, c-format
-msgid "describe and add a product that is not in the inventory list"
+msgid "Describe and add a product that is not in the inventory list"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:75
+#: src/components/product/NonInventoryProductForm.tsx:74
#, c-format
msgid "Add custom product"
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:86
+#: src/components/product/NonInventoryProductForm.tsx:85
#, c-format
msgid "Complete information of the product"
msgstr ""
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, c-format
+msgid "Must be a number"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, c-format
+msgid "Must be grater than 0"
+msgstr ""
+
#: src/components/product/NonInventoryProductForm.tsx:185
#, c-format
msgid "Image"
@@ -481,12 +1240,12 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:186
#, c-format
-msgid "photo of the product"
+msgid "Photo of the product."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:192
#, c-format
-msgid "full product description"
+msgid "Full product description."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:196
@@ -496,7 +1255,7 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:197
#, c-format
-msgid "name of the product unit"
+msgid "Name of the product unit."
msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:201
@@ -506,792 +1265,858 @@ msgstr ""
#: src/components/product/NonInventoryProductForm.tsx:202
#, c-format
-msgid "amount in the current currency"
+msgid "Amount in the current currency."
msgstr ""
-#: src/components/product/NonInventoryProductForm.tsx:211
+#: src/components/product/NonInventoryProductForm.tsx:208
#, c-format
-msgid "Taxes"
+msgid "How many products will be added."
msgstr ""
-#: src/components/product/ProductList.tsx:38
-#, c-format
-msgid "image"
-msgstr ""
-
-#: src/components/product/ProductList.tsx:41
-#, c-format
-msgid "description"
-msgstr ""
-
-#: src/components/product/ProductList.tsx:44
+#: src/components/product/NonInventoryProductForm.tsx:211
#, c-format
-msgid "quantity"
+msgid "Taxes"
msgstr ""
-#: src/components/product/ProductList.tsx:47
+#: src/components/product/ProductList.tsx:46
#, c-format
-msgid "unit price"
+msgid "Unit price"
msgstr ""
-#: src/components/product/ProductList.tsx:50
+#: src/components/product/ProductList.tsx:49
#, c-format
-msgid "total price"
+msgid "Total price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:153
+#: src/paths/instance/orders/create/CreatePage.tsx:162
#, c-format
-msgid "required"
+msgid "Must be greater than 0"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:157
+#: src/paths/instance/orders/create/CreatePage.tsx:173
#, c-format
-msgid "not valid"
+msgid "Refund deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:159
+#: src/paths/instance/orders/create/CreatePage.tsx:179
#, c-format
-msgid "must be greater than 0"
+msgid "Wire transfer deadline can't be before refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:164
+#: src/paths/instance/orders/create/CreatePage.tsx:188
#, c-format
-msgid "not a valid json"
+msgid "Wire transfer deadline can't be before pay deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:170
+#: src/paths/instance/orders/create/CreatePage.tsx:196
#, c-format
-msgid "should be in the future"
+msgid "Must have a refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:173
+#: src/paths/instance/orders/create/CreatePage.tsx:201
#, c-format
-msgid "refund deadline cannot be before pay deadline"
+msgid "Auto refund can't be after refund deadline"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:179
+#: src/paths/instance/orders/create/CreatePage.tsx:208
#, c-format
-msgid "wire transfer deadline cannot be before refund deadline"
+msgid "Must be in the future"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:190
+#: src/paths/instance/orders/create/CreatePage.tsx:376
#, c-format
-msgid "wire transfer deadline cannot be before pay deadline"
+msgid "Simple"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:197
+#: src/paths/instance/orders/create/CreatePage.tsx:388
#, c-format
-msgid "should have a refund deadline"
+msgid "Advanced"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:202
+#: src/paths/instance/orders/create/CreatePage.tsx:400
#, c-format
-msgid "auto refund cannot be after refund deadline"
+msgid "Manage products in order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:360
+#: src/paths/instance/orders/create/CreatePage.tsx:404
#, c-format
-msgid "Manage products in order"
+msgid "%1$s products with a total price of %2$s."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:369
+#: src/paths/instance/orders/create/CreatePage.tsx:411
#, c-format
msgid "Manage list of products in the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:391
+#: src/paths/instance/orders/create/CreatePage.tsx:435
#, c-format
msgid "Remove this product from the order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:415
-#, c-format
-msgid "Total price"
-msgstr ""
-
-#: src/paths/instance/orders/create/CreatePage.tsx:417
+#: src/paths/instance/orders/create/CreatePage.tsx:461
#, c-format
-msgid "total product price added up"
+msgid "Total product price added up"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:430
+#: src/paths/instance/orders/create/CreatePage.tsx:474
#, c-format
msgid "Amount to be paid by the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:436
+#: src/paths/instance/orders/create/CreatePage.tsx:480
#, c-format
msgid "Order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:437
+#: src/paths/instance/orders/create/CreatePage.tsx:481
#, c-format
-msgid "final order price"
+msgid "Final order price"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:444
+#: src/paths/instance/orders/create/CreatePage.tsx:488
#, c-format
msgid "Summary"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:445
+#: src/paths/instance/orders/create/CreatePage.tsx:489
#, c-format
msgid "Title of the order to be shown to the customer"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:450
+#: src/paths/instance/orders/create/CreatePage.tsx:495
#, c-format
-msgid "Shipping and Fulfillment"
+msgid "Shipping and fulfillment"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:455
+#: src/paths/instance/orders/create/CreatePage.tsx:500
#, c-format
msgid "Delivery date"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:456
+#: src/paths/instance/orders/create/CreatePage.tsx:501
#, c-format
msgid "Deadline for physical delivery assured by the merchant."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:461
+#: src/paths/instance/orders/create/CreatePage.tsx:506
#, c-format
msgid "Location"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:462
+#: src/paths/instance/orders/create/CreatePage.tsx:507
#, c-format
-msgid "address where the products will be delivered"
+msgid "Address where the products will be delivered"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:469
+#: src/paths/instance/orders/create/CreatePage.tsx:514
#, c-format
msgid "Fulfillment URL"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:470
+#: src/paths/instance/orders/create/CreatePage.tsx:515
#, c-format
msgid "URL to which the user will be redirected after successful payment."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:476
+#: src/paths/instance/orders/create/CreatePage.tsx:523
#, c-format
msgid "Taler payment options"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:477
+#: src/paths/instance/orders/create/CreatePage.tsx:524
#, c-format
msgid "Override default Taler payment settings for this order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:481
+#: src/paths/instance/orders/create/CreatePage.tsx:529
#, c-format
-msgid "Payment deadline"
+msgid "Payment time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:482
+#: src/paths/instance/orders/create/CreatePage.tsx:535
#, c-format
msgid ""
-"Deadline for the customer to pay for the offer before it expires. Inventory "
-"products will be reserved until this deadline."
+"Time for the customer to pay for the offer before it expires. Inventory products "
+"will be reserved until this deadline. Time start to run after the order is "
+"created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:486
+#: src/paths/instance/orders/create/CreatePage.tsx:552
#, c-format
-msgid "Refund deadline"
+msgid "Default"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:487
+#: src/paths/instance/orders/create/CreatePage.tsx:561
#, c-format
-msgid "Time until which the order can be refunded by the merchant."
+msgid "Refund time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:491
+#: src/paths/instance/orders/create/CreatePage.tsx:569
#, c-format
-msgid "Wire transfer deadline"
+msgid ""
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:594
+#, c-format
+msgid "Wire transfer time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:492
+#: src/paths/instance/orders/create/CreatePage.tsx:602
#, c-format
-msgid "Deadline for the exchange to make the wire transfer."
+msgid ""
+"Time for the exchange to make the wire transfer. Time starts after the order is "
+"created."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:496
+#: src/paths/instance/orders/create/CreatePage.tsx:628
#, c-format
-msgid "Auto-refund deadline"
+msgid "Auto-refund time"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:497
+#: src/paths/instance/orders/create/CreatePage.tsx:634
#, c-format
msgid ""
"Time until which the wallet will automatically check for refunds without user "
"interaction."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:502
+#: src/paths/instance/orders/create/CreatePage.tsx:642
#, c-format
-msgid "Maximum deposit fee"
+msgid "Maximum fee"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:503
+#: src/paths/instance/orders/create/CreatePage.tsx:643
#, c-format
msgid ""
-"Maximum deposit fees the merchant is willing to cover for this order. Higher "
-"deposit fees must be covered in full by the consumer."
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:507
+#: src/paths/instance/orders/create/CreatePage.tsx:649
#, c-format
-msgid "Maximum wire fee"
+msgid "Create token"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:508
+#: src/paths/instance/orders/create/CreatePage.tsx:650
#, c-format
msgid ""
-"Maximum aggregate wire fees the merchant is willing to cover for this order. "
-"Wire fees exceeding this amount are to be covered by the customers."
+"If the order ID is easy to guess the token will prevent users to steal orders "
+"from others."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:512
+#: src/paths/instance/orders/create/CreatePage.tsx:656
#, c-format
-msgid "Wire fee amortization"
+msgid "Minimum age required"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:513
+#: src/paths/instance/orders/create/CreatePage.tsx:657
#, c-format
msgid ""
-"Factor by which wire fees exceeding the above threshold are divided to determine "
-"the share of excess wire fees to be paid explicitly by the consumer."
+"Any value greater than 0 will limit the coins able be used to pay this contract. "
+"If empty the age restriction will be defined by the products"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:517
+#: src/paths/instance/orders/create/CreatePage.tsx:660
#, c-format
-msgid "Create token"
+msgid "Min age defined by the producs is %1$s"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:518
+#: src/paths/instance/orders/create/CreatePage.tsx:661
#, c-format
-msgid ""
-"Uncheck this option if the merchant backend generated an order ID with enough "
-"entropy to prevent adversarial claims."
+msgid "No product with age restriction in this order"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:522
+#: src/paths/instance/orders/create/CreatePage.tsx:671
#, c-format
-msgid "Minimum age required"
+msgid "Additional information"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:523
+#: src/paths/instance/orders/create/CreatePage.tsx:672
#, c-format
-msgid ""
-"Any value greater than 0 will limit the coins able be used to pay this contract. "
-"If empty the age restriction will be defined by the products"
+msgid "Custom information to be included in the contract for this order."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:526
+#: src/paths/instance/orders/create/CreatePage.tsx:681
#, c-format
-msgid "Min age defined by the producs is %1$s"
+msgid "You must enter a value in JavaScript Object Notation (JSON)."
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:534
+#: src/paths/instance/orders/create/CreatePage.tsx:707
#, c-format
-msgid "Additional information"
+msgid "Custom field name"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:535
+#: src/paths/instance/orders/create/CreatePage.tsx:793
#, c-format
-msgid "Custom information to be included in the contract for this order."
+msgid "Disabled"
msgstr ""
-#: src/paths/instance/orders/create/CreatePage.tsx:541
+#: src/paths/instance/orders/create/CreatePage.tsx:796
#, c-format
-msgid "You must enter a value in JavaScript Object Notation (JSON)."
+msgid "No deadline"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:55
+#: src/paths/instance/orders/create/CreatePage.tsx:797
#, c-format
-msgid "days"
+msgid "Deadline at %1$s"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:65
+#: src/paths/instance/orders/create/index.tsx:109
#, c-format
-msgid "hours"
+msgid "Could not create order"
msgstr ""
-#: src/components/picker/DurationPicker.tsx:76
+#: src/paths/instance/orders/create/index.tsx:111
#, c-format
-msgid "minutes"
+msgid "No exchange would accept a payment because of KYC requirements."
msgstr ""
-#: src/components/picker/DurationPicker.tsx:87
+#: src/paths/instance/orders/create/index.tsx:129
#, c-format
-msgid "seconds"
+msgid "No more stock for product with ID \"%1$s\"."
msgstr ""
-#: src/components/form/InputDuration.tsx:53
+#: src/paths/instance/orders/list/Table.tsx:75
#, c-format
-msgid "forever"
+msgid "Orders"
msgstr ""
-#: src/components/form/InputDuration.tsx:62
+#: src/paths/instance/orders/list/Table.tsx:81
#, c-format
-msgid "%1$sM"
+msgid "Create order"
msgstr ""
-#: src/components/form/InputDuration.tsx:64
+#: src/paths/instance/orders/list/Table.tsx:138
#, c-format
-msgid "%1$sY"
+msgid "Load first page"
msgstr ""
-#: src/components/form/InputDuration.tsx:66
+#: src/paths/instance/orders/list/Table.tsx:145
#, c-format
-msgid "%1$sd"
+msgid "Date"
msgstr ""
-#: src/components/form/InputDuration.tsx:68
+#: src/paths/instance/orders/list/Table.tsx:191
#, c-format
-msgid "%1$sh"
+msgid "Refund"
msgstr ""
-#: src/components/form/InputDuration.tsx:70
+#: src/paths/instance/orders/list/Table.tsx:200
#, c-format
-msgid "%1$smin"
+msgid "copy url"
msgstr ""
-#: src/components/form/InputDuration.tsx:72
+#: src/paths/instance/orders/list/Table.tsx:213
#, c-format
-msgid "%1$ssec"
+msgid "Load more orders after the last one"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:75
+#: src/paths/instance/orders/list/Table.tsx:216
#, c-format
-msgid "Orders"
+msgid "Load next page"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:81
+#: src/paths/instance/orders/list/Table.tsx:233
#, c-format
-msgid "create order"
+msgid "No orders have been found matching your query!"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:147
+#: src/paths/instance/orders/list/Table.tsx:280
#, c-format
-msgid "load newer orders"
+msgid "Duplicated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:154
+#: src/paths/instance/orders/list/Table.tsx:293
#, c-format
-msgid "Date"
+msgid "This value exceed the refundable amount"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:200
+#: src/paths/instance/orders/list/Table.tsx:381
#, c-format
-msgid "Refund"
+msgid "Amount to be refunded"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:209
+#: src/paths/instance/orders/list/Table.tsx:383
#, c-format
-msgid "copy url"
+msgid "Max refundable:"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:225
+#: src/paths/instance/orders/list/Table.tsx:391
#, c-format
-msgid "load older orders"
+msgid "Requested by the customer"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:242
+#: src/paths/instance/orders/list/Table.tsx:392
#, c-format
-msgid "No orders have been found matching your query!"
+msgid "Other"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:288
+#: src/paths/instance/orders/list/Table.tsx:395
#, c-format
-msgid "duplicated"
+msgid "Why this order is being refunded"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:299
+#: src/paths/instance/orders/list/Table.tsx:401
#, c-format
-msgid "invalid format"
+msgid "More information to give context"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:70
#, c-format
-msgid "this value exceed the refundable amount"
+msgid "Contract terms"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:346
+#: src/paths/instance/orders/details/DetailPage.tsx:76
#, c-format
-msgid "date"
+msgid "Human-readable description of the whole purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:349
+#: src/paths/instance/orders/details/DetailPage.tsx:82
#, c-format
-msgid "amount"
+msgid "Total price for the transaction"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:352
+#: src/paths/instance/orders/details/DetailPage.tsx:89
#, c-format
-msgid "reason"
+msgid "URL for this purchase"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:389
+#: src/paths/instance/orders/details/DetailPage.tsx:95
#, c-format
-msgid "amount to be refunded"
+msgid "Max fee"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:391
+#: src/paths/instance/orders/details/DetailPage.tsx:96
#, c-format
-msgid "Max refundable:"
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:396
+#: src/paths/instance/orders/details/DetailPage.tsx:101
#, c-format
-msgid "Reason"
+msgid "Created at"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:397
+#: src/paths/instance/orders/details/DetailPage.tsx:102
#, c-format
-msgid "Choose one..."
+msgid "Time when this contract was generated"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:399
+#: src/paths/instance/orders/details/DetailPage.tsx:107
#, c-format
-msgid "requested by the customer"
+msgid "Refund deadline"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:400
+#: src/paths/instance/orders/details/DetailPage.tsx:108
#, c-format
-msgid "other"
+msgid "After this deadline has passed no refunds will be accepted"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:403
+#: src/paths/instance/orders/details/DetailPage.tsx:113
#, c-format
-msgid "why this order is being refunded"
+msgid "Payment deadline"
msgstr ""
-#: src/paths/instance/orders/list/Table.tsx:409
+#: src/paths/instance/orders/details/DetailPage.tsx:114
#, c-format
-msgid "more information to give context"
+msgid "After this deadline, the merchant won't accept payments for the contract"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:62
+#: src/paths/instance/orders/details/DetailPage.tsx:119
#, c-format
-msgid "Contract Terms"
+msgid "Wire transfer deadline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:68
+#: src/paths/instance/orders/details/DetailPage.tsx:120
#, c-format
-msgid "human-readable description of the whole purchase"
+msgid "Transfer deadline for the exchange"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:74
+#: src/paths/instance/orders/details/DetailPage.tsx:126
#, c-format
-msgid "total price for the transaction"
+msgid "Time indicating when the order should be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:81
+#: src/paths/instance/orders/details/DetailPage.tsx:132
#, c-format
-msgid "URL for this purchase"
+msgid "Where the order will be delivered"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:87
+#: src/paths/instance/orders/details/DetailPage.tsx:140
#, c-format
-msgid "Max fee"
+msgid "Auto-refund delay"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:88
+#: src/paths/instance/orders/details/DetailPage.tsx:141
#, c-format
-msgid "maximum total deposit fee accepted by the merchant for this contract"
+msgid "How long the wallet should try to get an automatic refund for the purchase"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:93
+#: src/paths/instance/orders/details/DetailPage.tsx:146
#, c-format
-msgid "Max wire fee"
+msgid "Extra info"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:94
+#: src/paths/instance/orders/details/DetailPage.tsx:147
#, c-format
-msgid "maximum wire fee accepted by the merchant"
+msgid "Extra data that is only interpreted by the merchant frontend"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:100
+#: src/paths/instance/orders/details/DetailPage.tsx:220
#, c-format
-msgid ""
-"over how many customer transactions does the merchant expect to amortize wire "
-"fees on average"
+msgid "Order"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:105
+#: src/paths/instance/orders/details/DetailPage.tsx:222
#, c-format
-msgid "Created at"
+msgid "Claimed"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:106
+#: src/paths/instance/orders/details/DetailPage.tsx:249
#, c-format
-msgid "time when this contract was generated"
+msgid "Claimed at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:112
+#: src/paths/instance/orders/details/DetailPage.tsx:271
#, c-format
-msgid "after this deadline has passed no refunds will be accepted"
+msgid "Timeline"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:118
+#: src/paths/instance/orders/details/DetailPage.tsx:277
#, c-format
-msgid "after this deadline, the merchant won't accept payments for the contract"
+msgid "Payment details"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:124
+#: src/paths/instance/orders/details/DetailPage.tsx:297
#, c-format
-msgid "transfer deadline for the exchange"
+msgid "Order status"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:130
+#: src/paths/instance/orders/details/DetailPage.tsx:307
#, c-format
-msgid "time indicating when the order should be delivered"
+msgid "Product list"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:136
+#: src/paths/instance/orders/details/DetailPage.tsx:459
#, c-format
-msgid "where the order will be delivered"
+msgid "Paid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:144
+#: src/paths/instance/orders/details/DetailPage.tsx:463
#, c-format
-msgid "Auto-refund delay"
+msgid "Wired"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:145
+#: src/paths/instance/orders/details/DetailPage.tsx:468
#, c-format
-msgid "how long the wallet should try to get an automatic refund for the purchase"
+msgid "Refunded"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:150
+#: src/paths/instance/orders/details/DetailPage.tsx:488
#, c-format
-msgid "Extra info"
+msgid "Refund order"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:151
+#: src/paths/instance/orders/details/DetailPage.tsx:489
#, c-format
-msgid "extra data that is only interpreted by the merchant frontend"
+msgid "Not refundable"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:219
+#: src/paths/instance/orders/details/DetailPage.tsx:519
#, c-format
-msgid "Order"
+msgid "Next event in"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:221
+#: src/paths/instance/orders/details/DetailPage.tsx:555
#, c-format
-msgid "claimed"
+msgid "Refunded amount"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:247
+#: src/paths/instance/orders/details/DetailPage.tsx:562
#, c-format
-msgid "claimed at"
+msgid "Refund taken"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:265
+#: src/paths/instance/orders/details/DetailPage.tsx:572
#, c-format
-msgid "Timeline"
+msgid "Status URL"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:271
+#: src/paths/instance/orders/details/DetailPage.tsx:585
#, c-format
-msgid "Payment details"
+msgid "Refund URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:291
+#: src/paths/instance/orders/details/DetailPage.tsx:639
#, c-format
-msgid "Order status"
+msgid "Unpaid"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:301
+#: src/paths/instance/orders/details/DetailPage.tsx:657
#, c-format
-msgid "Product list"
+msgid "Pay at"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:451
+#: src/paths/instance/orders/details/DetailPage.tsx:710
#, c-format
-msgid "paid"
+msgid "Order status URL"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:455
+#: src/paths/instance/orders/details/DetailPage.tsx:714
#, c-format
-msgid "wired"
+msgid "Payment URI"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:460
+#: src/paths/instance/orders/details/DetailPage.tsx:743
#, c-format
-msgid "refunded"
+msgid "Unknown order status. This is an error, please contact the administrator."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:480
+#: src/paths/instance/orders/details/DetailPage.tsx:770
#, c-format
-msgid "refund order"
+msgid "Back"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:481
+#: src/paths/instance/orders/details/index.tsx:88
#, c-format
-msgid "not refundable"
+msgid "Refund created successfully"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:489
+#: src/paths/instance/orders/details/index.tsx:95
#, c-format
-msgid "refund"
+msgid "Could not create the refund"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:553
+#: src/paths/instance/orders/details/index.tsx:97
#, c-format
-msgid "Refunded amount"
+msgid "There are pending KYC requirements."
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:560
+#: src/components/form/JumpToElementById.tsx:39
#, c-format
-msgid "Refund taken"
+msgid "Missing id"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:570
+#: src/components/form/JumpToElementById.tsx:48
#, c-format
-msgid "Status URL"
+msgid "Not found"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:583
+#: src/paths/instance/orders/list/ListPage.tsx:83
#, c-format
-msgid "Refund URI"
+msgid "Select date to show nearby orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:636
+#: src/paths/instance/orders/list/ListPage.tsx:96
#, c-format
-msgid "unpaid"
+msgid "Only show paid orders"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:654
+#: src/paths/instance/orders/list/ListPage.tsx:99
#, c-format
-msgid "pay at"
+msgid "New"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:666
+#: src/paths/instance/orders/list/ListPage.tsx:116
#, c-format
-msgid "created at"
+msgid "Only show orders with refunds"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:707
+#: src/paths/instance/orders/list/ListPage.tsx:126
#, c-format
-msgid "Order status URL"
+msgid ""
+"Only show orders where customers paid, but wire payments from payment provider "
+"are still pending"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:711
+#: src/paths/instance/orders/list/ListPage.tsx:129
#, c-format
-msgid "Payment URI"
+msgid "Not wired"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:740
+#: src/paths/instance/orders/list/ListPage.tsx:139
#, c-format
-msgid "Unknown order status. This is an error, please contact the administrator."
+msgid "Completed"
msgstr ""
-#: src/paths/instance/orders/details/DetailPage.tsx:767
+#: src/paths/instance/orders/list/ListPage.tsx:146
#, c-format
-msgid "Back"
+msgid "Remove all filters"
msgstr ""
-#: src/paths/instance/orders/details/index.tsx:79
+#: src/paths/instance/orders/list/ListPage.tsx:164
#, c-format
-msgid "refund created successfully"
+msgid "Clear date filter"
msgstr ""
-#: src/paths/instance/orders/details/index.tsx:85
+#: src/paths/instance/orders/list/ListPage.tsx:178
#, c-format
-msgid "could not create the refund"
+msgid "Jump to date (%1$s)"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:78
+#: src/paths/instance/orders/list/index.tsx:113
#, c-format
-msgid "select date to show nearby orders"
+msgid "Jump to order with the given product ID"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:94
+#: src/paths/instance/orders/list/index.tsx:114
#, c-format
-msgid "order id"
+msgid "Order id"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:100
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
#, c-format
-msgid "jump to order with the given order ID"
+msgid "Invalid. Please insert only characters and numbers"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:122
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
#, c-format
-msgid "remove all filters"
+msgid "Just letters and numbers from 2 to 7"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:132
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
#, c-format
-msgid "only show paid orders"
+msgid "Size of the key must be 32"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:135
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
#, c-format
-msgid "Paid"
+msgid "Internal id on the system"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:142
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
#, c-format
-msgid "only show orders with refunds"
+msgid "Useful to identify the device physically"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:145
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
#, c-format
-msgid "Refunded"
+msgid "Verification algorithm"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:152
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
+#, c-format
+msgid "Algorithm to use to verify transaction in offline mode"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
+#, c-format
+msgid "Device key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
+#, c-format
+msgid "Be sure to be very hard to guess or use the random generator"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
+#, c-format
+msgid "Your device need to have exactly the same value"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
+#, c-format
+msgid "Generate random secret key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
+#, c-format
+msgid "Random"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
#, c-format
msgid ""
-"only show orders where customers paid, but wire payments from payment provider "
-"are still pending"
+"You can scan the next QR code with your device or save the key before "
+"continuing."
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:155
+#: src/paths/instance/otp_devices/create/index.tsx:60
#, c-format
-msgid "Not wired"
+msgid "Device added successfully"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:170
+#: src/paths/instance/otp_devices/create/index.tsx:66
#, c-format
-msgid "clear date filter"
+msgid "Could not add device"
msgstr ""
-#: src/paths/instance/orders/list/ListPage.tsx:184
+#: src/paths/instance/otp_devices/list/Table.tsx:57
#, c-format
-msgid "date (YYYY/MM/DD)"
+msgid "OTP Devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:103
+#: src/paths/instance/otp_devices/list/Table.tsx:62
#, c-format
-msgid "Enter an order id"
+msgid "Add new devices"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:111
+#: src/paths/instance/otp_devices/list/Table.tsx:117
#, c-format
-msgid "order not found"
+msgid "Load more devices before the first one"
msgstr ""
-#: src/paths/instance/orders/list/index.tsx:178
+#: src/paths/instance/otp_devices/list/Table.tsx:155
#, c-format
-msgid "could not get the order to refund"
+msgid "Delete selected devices from the database"
msgstr ""
-#: src/components/exception/AsyncButton.tsx:43
+#: src/paths/instance/otp_devices/list/Table.tsx:170
#, c-format
-msgid "Loading..."
+msgid "Load more devices after the last one"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:90
+#, c-format
+msgid "Device delete successfully"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:95
+#, c-format
+msgid "Could not delete the device"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
+#, c-format
+msgid "Device:"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
+#, c-format
+msgid "Not modified"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
+#, c-format
+msgid "Change key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:119
+#, c-format
+msgid "Could not update template"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:121
+#, c-format
+msgid "Template id is unknown"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:129
+#, c-format
+msgid "The provided information is inconsistent with the current state of the template"
msgstr ""
#: src/components/form/InputStock.tsx:99
#, c-format
msgid ""
-"click here to configure the stock of the product, leave it as is and the backend "
-"will not control stock"
+"Click here to configure the stock of the product, leave it as is and the backend "
+"will not control stock."
msgstr ""
#: src/components/form/InputStock.tsx:109
@@ -1301,7 +2126,7 @@ msgstr ""
#: src/components/form/InputStock.tsx:115
#, c-format
-msgid "this product has been configured without stock control"
+msgid "This product has been configured without stock control"
msgstr ""
#: src/components/form/InputStock.tsx:119
@@ -1311,1397 +2136,1510 @@ msgstr ""
#: src/components/form/InputStock.tsx:136
#, c-format
-msgid "lost cannot be greater than current and incoming (max %1$s)"
+msgid "Lost can't be greater than current and incoming (max %1$s)"
msgstr ""
-#: src/components/form/InputStock.tsx:176
+#: src/components/form/InputStock.tsx:169
#, c-format
msgid "Incoming"
msgstr ""
-#: src/components/form/InputStock.tsx:177
+#: src/components/form/InputStock.tsx:170
#, c-format
msgid "Lost"
msgstr ""
-#: src/components/form/InputStock.tsx:192
+#: src/components/form/InputStock.tsx:185
#, c-format
msgid "Current"
msgstr ""
-#: src/components/form/InputStock.tsx:196
+#: src/components/form/InputStock.tsx:189
#, c-format
-msgid "remove stock control for this product"
+msgid "Remove stock control for this product"
msgstr ""
-#: src/components/form/InputStock.tsx:202
+#: src/components/form/InputStock.tsx:195
#, c-format
msgid "without stock"
msgstr ""
-#: src/components/form/InputStock.tsx:211
+#: src/components/form/InputStock.tsx:204
#, c-format
msgid "Next restock"
msgstr ""
-#: src/components/form/InputStock.tsx:217
+#: src/components/form/InputStock.tsx:208
+#, c-format
+msgid "Warehouse address"
+msgstr ""
+
+#: src/components/form/InputArray.tsx:118
+#, c-format
+msgid "Add element to the list"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:120
#, c-format
-msgid "Delivery address"
+msgid "Invalid amount"
msgstr ""
-#: src/components/product/ProductForm.tsx:133
+#: src/components/product/ProductForm.tsx:191
#, c-format
-msgid "product identification to use in URLs (for internal use only)"
+msgid "Product identification to use in URLs (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:139
+#: src/components/product/ProductForm.tsx:197
#, c-format
-msgid "illustration of the product for customers"
+msgid "Illustration of the product for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:145
+#: src/components/product/ProductForm.tsx:203
#, c-format
-msgid "product description for customers"
+msgid "Product description for customers."
msgstr ""
-#: src/components/product/ProductForm.tsx:149
+#: src/components/product/ProductForm.tsx:207
#, c-format
-msgid "Age restricted"
+msgid "Age restriction"
msgstr ""
-#: src/components/product/ProductForm.tsx:150
+#: src/components/product/ProductForm.tsx:208
#, c-format
-msgid "is this product restricted for customer below certain age?"
+msgid "Is this product restricted for customer below certain age?"
msgstr ""
-#: src/components/product/ProductForm.tsx:155
+#: src/components/product/ProductForm.tsx:209
+#, c-format
+msgid "Minimum age of the customer"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:213
+#, c-format
+msgid "Unit name"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:214
#, c-format
msgid ""
-"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 "
-"meters) for customers"
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 "
+"meters) for customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:215
+#, c-format
+msgid "Example: kg, items or liters"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:219
+#, c-format
+msgid "Price per unit"
msgstr ""
-#: src/components/product/ProductForm.tsx:160
+#: src/components/product/ProductForm.tsx:220
#, c-format
-msgid "sale price for customers, including taxes, for above units of the product"
+msgid "Sale price for customers, including taxes, for above units of the product."
msgstr ""
-#: src/components/product/ProductForm.tsx:164
+#: src/components/product/ProductForm.tsx:224
#, c-format
msgid "Stock"
msgstr ""
-#: src/components/product/ProductForm.tsx:166
+#: src/components/product/ProductForm.tsx:226
#, c-format
-msgid "product inventory for products with finite supply (for internal use only)"
+msgid "Inventory for products with finite supply (for internal use only)."
msgstr ""
-#: src/components/product/ProductForm.tsx:171
+#: src/components/product/ProductForm.tsx:231
#, c-format
-msgid "taxes included in the product price, exposed to customers"
+msgid "Taxes included in the product price, exposed to customers."
msgstr ""
-#: src/paths/instance/products/create/CreatePage.tsx:66
+#: src/components/product/ProductForm.tsx:235
#, c-format
-msgid "Need to complete marked fields"
+msgid "Categories"
msgstr ""
-#: src/paths/instance/products/create/index.tsx:51
+#: src/components/product/ProductForm.tsx:241
#, c-format
-msgid "could not create product"
+msgid "Search by category description or id"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:68
+#: src/components/product/ProductForm.tsx:242
#, c-format
-msgid "Products"
+msgid "Categories where this product will be listed on."
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:52
+#, c-format
+msgid "Product created successfully"
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:58
+#, c-format
+msgid "Could not create product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:73
+#: src/paths/instance/products/list/Table.tsx:76
#, c-format
-msgid "add product to inventory"
+msgid "Inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:137
+#: src/paths/instance/products/list/Table.tsx:81
#, c-format
-msgid "Sell"
+msgid "Add product to inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:143
+#: src/paths/instance/products/list/Table.tsx:163
#, c-format
-msgid "Profit"
+msgid "Sales"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:149
+#: src/paths/instance/products/list/Table.tsx:169
#, c-format
msgid "Sold"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:210
+#: src/paths/instance/products/list/Table.tsx:235
#, c-format
-msgid "free"
+msgid "Free"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:248
+#: src/paths/instance/products/list/Table.tsx:275
#, c-format
-msgid "go to product update page"
+msgid "Go to product update page"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:255
+#: src/paths/instance/products/list/Table.tsx:282
#, c-format
msgid "Update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:260
+#: src/paths/instance/products/list/Table.tsx:287
+#, c-format
+msgid "Remove this product from the database"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:323
+#, c-format
+msgid "Load more products after the last one"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:365
#, c-format
-msgid "remove this product from the database"
+msgid "Update the product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:331
+#: src/paths/instance/products/list/Table.tsx:376
#, c-format
-msgid "update the product with new price"
+msgid "Update product with new price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:341
+#: src/paths/instance/products/list/Table.tsx:387
#, c-format
-msgid "update product with new price"
+msgid "Confirm update"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:399
+#: src/paths/instance/products/list/Table.tsx:435
#, c-format
-msgid "add more elements to the inventory"
+msgid "Add more elements to the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:404
+#: src/paths/instance/products/list/Table.tsx:440
#, c-format
-msgid "report elements lost in the inventory"
+msgid "Report elements lost in the inventory"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:409
+#: src/paths/instance/products/list/Table.tsx:445
#, c-format
-msgid "new price for the product"
+msgid "New price for the product"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:421
+#: src/paths/instance/products/list/Table.tsx:457
#, c-format
-msgid "the are value with errors"
+msgid "The are value with errors"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:422
+#: src/paths/instance/products/list/Table.tsx:458
#, c-format
-msgid "update product with new stock and price"
+msgid "Update product with new stock and price"
msgstr ""
-#: src/paths/instance/products/list/Table.tsx:463
+#: src/paths/instance/products/list/Table.tsx:499
#, c-format
-msgid "There is no products yet, add more pressing the + sign"
+msgid "There are no products yet, add more pressing the + sign"
msgstr ""
#: src/paths/instance/products/list/index.tsx:86
#, c-format
-msgid "product updated successfully"
+msgid "Jump to product with the given product ID"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:92
+#: src/paths/instance/products/list/index.tsx:87
#, c-format
-msgid "could not update the product"
+msgid "Product id"
msgstr ""
-#: src/paths/instance/products/list/index.tsx:103
+#: src/paths/instance/products/list/index.tsx:104
#, c-format
-msgid "product delete successfully"
+msgid "Product updated successfully"
msgstr ""
#: src/paths/instance/products/list/index.tsx:109
#, c-format
-msgid "could not delete the product"
+msgid "Could not update the product"
msgstr ""
-#: src/paths/instance/products/update/UpdatePage.tsx:56
+#: src/paths/instance/products/list/index.tsx:144
#, c-format
-msgid "Product id:"
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:149
+#, c-format
+msgid "Could not delete the product"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:95
+#: src/paths/instance/products/list/index.tsx:165
#, c-format
msgid ""
-"To complete the setup of the reserve, you must now initiate a wire transfer "
-"using the given wire transfer subject and crediting the specified amount to the "
-"indicated account of the exchange."
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
msgstr ""
-#: src/paths/instance/reserves/create/CreatedSuccessfully.tsx:102
+#: src/paths/instance/products/list/index.tsx:173
#, c-format
-msgid "If your system supports RFC 8905, you can do this by opening this URI:"
+msgid "Deleting an product can't be undone."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:83
+#: src/paths/instance/products/update/UpdatePage.tsx:56
#, c-format
-msgid "it should be greater than 0"
+msgid "Product id:"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:88
+#: src/paths/instance/products/update/index.tsx:85
#, c-format
-msgid "must be a valid URL"
+msgid "Product (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:107
+#: src/paths/instance/products/update/index.tsx:91
#, c-format
-msgid "Initial balance"
+msgid "Could not update product"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:112
#, c-format
-msgid "balance prior to deposit"
+msgid "Must be greater that 0"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:119
#, c-format
-msgid "Exchange URL"
+msgid "Too short"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:113
+#: src/paths/instance/templates/create/CreatePage.tsx:192
#, c-format
-msgid "URL of exchange"
+msgid "Identifier"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:148
+#: src/paths/instance/templates/create/CreatePage.tsx:193
#, c-format
-msgid "Next"
+msgid "Name of the template in URLs."
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:186
+#: src/paths/instance/templates/create/CreatePage.tsx:199
#, c-format
-msgid "Wire method"
+msgid "Describe what this template stands for"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:187
+#: src/paths/instance/templates/create/CreatePage.tsx:206
#, c-format
-msgid "method to use for wire transfer"
+msgid "If specified, this template will create an order with the same summary"
msgstr ""
-#: src/paths/instance/reserves/create/CreatePage.tsx:189
+#: src/paths/instance/templates/create/CreatePage.tsx:210
#, c-format
-msgid "Select one wire method"
+msgid "Summary is editable"
msgstr ""
-#: src/paths/instance/reserves/create/index.tsx:62
+#: src/paths/instance/templates/create/CreatePage.tsx:211
#, c-format
-msgid "could not create reserve"
+msgid "Allow the user to change the summary."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:77
+#: src/paths/instance/templates/create/CreatePage.tsx:217
#, c-format
-msgid "Valid until"
+msgid "If specified, this template will create an order with the same price"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:82
+#: src/paths/instance/templates/create/CreatePage.tsx:221
#, c-format
-msgid "Created balance"
+msgid "Amount is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:99
+#: src/paths/instance/templates/create/CreatePage.tsx:222
#, c-format
-msgid "Exchange balance"
+msgid "Allow the user to select the amount to pay."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:104
+#: src/paths/instance/templates/create/CreatePage.tsx:229
#, c-format
-msgid "Picked up"
+msgid "Currency is editable"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:109
+#: src/paths/instance/templates/create/CreatePage.tsx:230
#, c-format
-msgid "Committed"
+msgid "Allow the user to change currency."
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:116
+#: src/paths/instance/templates/create/CreatePage.tsx:232
#, c-format
-msgid "Account address"
+msgid "Supported currencies"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:233
#, c-format
-msgid "Subject"
+msgid "Supported currencies: %1$s"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:130
+#: src/paths/instance/templates/create/CreatePage.tsx:241
#, c-format
-msgid "Tips"
+msgid "Minimum age"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:193
+#: src/paths/instance/templates/create/CreatePage.tsx:243
#, c-format
-msgid "No tips has been authorized from this reserve"
+msgid "Is this contract restricted to some age?"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:213
+#: src/paths/instance/templates/create/CreatePage.tsx:247
#, c-format
-msgid "Authorized"
+msgid "Payment timeout"
msgstr ""
-#: src/paths/instance/reserves/details/DetailPage.tsx:222
+#: src/paths/instance/templates/create/CreatePage.tsx:249
#, c-format
-msgid "Expiration"
+msgid ""
+"How much time the customer has to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:108
+#: src/paths/instance/templates/create/CreatePage.tsx:254
#, c-format
-msgid "amount of tip"
+msgid "OTP device"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:112
+#: src/paths/instance/templates/create/CreatePage.tsx:255
#, c-format
-msgid "Justification"
+msgid "Use to verify transaction while offline."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:114
+#: src/paths/instance/templates/create/CreatePage.tsx:257
#, c-format
-msgid "reason for the tip"
+msgid "No OTP device."
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:118
+#: src/paths/instance/templates/create/CreatePage.tsx:259
#, c-format
-msgid "URL after tip"
+msgid "Add one first"
msgstr ""
-#: src/paths/instance/reserves/list/AutorizeTipModal.tsx:119
+#: src/paths/instance/templates/create/CreatePage.tsx:272
#, c-format
-msgid "URL to visit after tip payment"
+msgid "No device"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:65
+#: src/paths/instance/templates/create/CreatePage.tsx:276
#, c-format
-msgid "Reserves not yet funded"
+msgid "Use to verify transaction in offline mode."
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:89
+#: src/paths/instance/templates/create/index.tsx:52
#, c-format
-msgid "Reserves ready"
+msgid "Template has been created"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:95
+#: src/paths/instance/templates/create/index.tsx:58
#, c-format
-msgid "add new reserve"
+msgid "Could not create template"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:143
+#: src/paths/instance/templates/list/Table.tsx:61
#, c-format
-msgid "Expires at"
+msgid "Templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:146
+#: src/paths/instance/templates/list/Table.tsx:66
#, c-format
-msgid "Initial"
+msgid "Add new templates"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:202
+#: src/paths/instance/templates/list/Table.tsx:127
#, c-format
-msgid "delete selected reserve from the database"
+msgid "Load more templates before the first one"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:210
+#: src/paths/instance/templates/list/Table.tsx:165
#, c-format
-msgid "authorize new tip from selected reserve"
+msgid "Delete selected templates from the database"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:237
+#: src/paths/instance/templates/list/Table.tsx:172
#, c-format
-msgid "There is no ready reserves yet, add more pressing the + sign or fund them"
+msgid "Use template to create new order"
msgstr ""
-#: src/paths/instance/reserves/list/Table.tsx:264
+#: src/paths/instance/templates/list/Table.tsx:175
#, c-format
-msgid "Expected Balance"
+msgid "Use template"
msgstr ""
-#: src/paths/instance/reserves/list/index.tsx:110
+#: src/paths/instance/templates/list/Table.tsx:179
#, c-format
-msgid "could not create the tip"
+msgid "Create qr code for the template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:77
+#: src/paths/instance/templates/list/Table.tsx:194
#, c-format
-msgid "should not be empty"
+msgid "Load more templates after the last one"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:93
+#: src/paths/instance/templates/list/Table.tsx:214
#, c-format
-msgid "should be greater that 0"
+msgid "There are no templates yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:96
+#: src/paths/instance/templates/list/index.tsx:91
#, c-format
-msgid "can't be empty"
+msgid "Jump to template with the given template ID"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:100
+#: src/paths/instance/templates/list/index.tsx:92
#, c-format
-msgid "to short"
+msgid "Template identification"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:108
+#: src/paths/instance/templates/list/index.tsx:132
#, c-format
-msgid "just letters and numbers from 2 to 7"
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:110
+#: src/paths/instance/templates/list/index.tsx:137
#, c-format
-msgid "size of the key should be 32"
+msgid "Failed to delete template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:137
+#: src/paths/instance/templates/list/index.tsx:153
#, c-format
-msgid "Identifier"
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:138
+#: src/paths/instance/templates/list/index.tsx:160
#, c-format
-msgid "Name of the template in URLs."
+msgid "Deleting an template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:144
+#: src/paths/instance/templates/list/index.tsx:162
#, c-format
-msgid "Describe what this template stands for"
+msgid "can't be undone"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:149
+#: src/paths/instance/templates/qr/QrPage.tsx:77
#, c-format
-msgid "Fixed summary"
+msgid "Print"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:150
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
#, c-format
msgid "If specified, this template will create order with the same summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:154
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
#, c-format
-msgid "Fixed price"
+msgid "If specified, this template will create orders with the same price"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:155
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
#, c-format
-msgid "If specified, this template will create order with the same price"
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:159
+#: src/paths/instance/templates/update/index.tsx:90
#, c-format
-msgid "Minimum age"
+msgid "Template (ID: %1$s) has been updated"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:161
+#: src/paths/instance/templates/use/UsePage.tsx:58
#, c-format
-msgid "Is this contract restricted to some age?"
+msgid "An amount is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:165
+#: src/paths/instance/templates/use/UsePage.tsx:60
#, c-format
-msgid "Payment timeout"
+msgid "An order summary is required"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:167
+#: src/paths/instance/templates/use/UsePage.tsx:88
#, c-format
-msgid ""
-"How much time has the customer to complete the payment once the order was "
-"created."
+msgid "New order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:171
+#: src/paths/instance/templates/use/UsePage.tsx:110
#, c-format
-msgid "Verification algorithm"
+msgid "Amount of the order"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:172
+#: src/paths/instance/templates/use/UsePage.tsx:115
#, c-format
-msgid "Algorithm to use to verify transaction in offline mode"
+msgid "Order summary"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:180
+#: src/paths/instance/templates/use/index.tsx:125
#, c-format
-msgid "Point-of-sale key"
+msgid "Could not create order from template"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:182
+#: src/paths/instance/token/DetailPage.tsx:57
#, c-format
-msgid "Useful to validate the purchase"
+msgid "You need your access token to perform the operation"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:196
+#: src/paths/instance/token/DetailPage.tsx:74
#, c-format
-msgid "generate random secret key"
+msgid "You are updating the access token from instance with id \"%1$s\""
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:203
+#: src/paths/instance/token/DetailPage.tsx:105
#, c-format
-msgid "random"
+msgid "This instance doesn't have authentication token."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:208
+#: src/paths/instance/token/DetailPage.tsx:106
#, c-format
-msgid "show secret key"
+msgid "You can leave it empty if there is another layer of security."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:209
+#: src/paths/instance/token/DetailPage.tsx:121
#, c-format
-msgid "hide secret key"
+msgid "Current access token"
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:216
+#: src/paths/instance/token/DetailPage.tsx:126
#, c-format
-msgid "hide"
+msgid "Clearing the access token will mean public access to the instance."
msgstr ""
-#: src/paths/instance/templates/create/CreatePage.tsx:218
+#: src/paths/instance/token/DetailPage.tsx:142
#, c-format
-msgid "show"
+msgid "Clear token"
msgstr ""
-#: src/paths/instance/templates/create/index.tsx:52
+#: src/paths/instance/token/DetailPage.tsx:177
#, c-format
-msgid "could not inform template"
+msgid "Confirm change"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:54
+#: src/paths/instance/token/index.tsx:83
#, c-format
-msgid "Amount is required"
+msgid "Failed to clear token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:58
+#: src/paths/instance/token/index.tsx:109
#, c-format
-msgid "Order summary is required"
+msgid "Failed to set new token"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:86
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
#, c-format
-msgid "New order for template"
+msgid "Slug"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:108
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
#, c-format
-msgid "Amount of the order"
+msgid "Token family slug to use in URLs (for internal use only)"
msgstr ""
-#: src/paths/instance/templates/use/UsePage.tsx:113
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
#, c-format
-msgid "Order summary"
+msgid "Kind"
msgstr ""
-#: src/paths/instance/templates/use/index.tsx:92
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
#, c-format
-msgid "could not create order from template"
+msgid "Token family kind"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:131
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
#, c-format
-msgid ""
-"Here you can specify a default value for fields that are not fixed. Default "
-"values can be edited by the customer before the payment."
+msgid "User-readable token family name"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:148
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
#, c-format
-msgid "Fixed amount"
+msgid "Token family description for customers"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:149
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
#, c-format
-msgid "Default amount"
+msgid "Valid After"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:161
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
#, c-format
-msgid "Default summary"
+msgid "Token family can issue tokens after this date"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:177
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
#, c-format
-msgid "Print"
+msgid "Valid Before"
msgstr ""
-#: src/paths/instance/templates/qr/QrPage.tsx:184
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
#, c-format
-msgid "Setup TOTP"
+msgid "Token family can issue tokens until this date"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:65
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
#, c-format
-msgid "Templates"
+msgid "Duration"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:70
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
#, c-format
-msgid "add new templates"
+msgid "Validity duration of a issued token"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:142
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
#, c-format
-msgid "load more templates before the first one"
+msgid "Token familty created successfully"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:146
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
#, c-format
-msgid "load newer templates"
+msgid "Could not create token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:181
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
#, c-format
-msgid "delete selected templates from the database"
+msgid "Token Families"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:188
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
#, c-format
-msgid "use template to create new order"
+msgid "Add token family"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:195
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
#, c-format
-msgid "create qr code for the template"
+msgid "Go to token family update page"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:210
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
#, c-format
-msgid "load more templates after the last one"
+msgid "Remove this token family from the database"
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:214
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
#, c-format
-msgid "load older templates"
+msgid "There are no token families yet, add the first one by pressing the + sign."
msgstr ""
-#: src/paths/instance/templates/list/Table.tsx:231
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
#, c-format
-msgid "There is no templates yet, add more pressing the + sign"
+msgid "Token family updated successfully"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:104
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
#, c-format
-msgid "template delete successfully"
+msgid "Could not update the token family"
msgstr ""
-#: src/paths/instance/templates/list/index.tsx:110
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
#, c-format
-msgid "could not delete the template"
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
msgstr ""
-#: src/paths/instance/templates/update/index.tsx:90
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
#, c-format
-msgid "could not update template"
+msgid "Failed to delete token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:57
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
#, c-format
-msgid "should be one of '%1$s'"
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will become "
+"invalid."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
#, c-format
-msgid "Webhook ID to use"
+msgid "Deleting a token family %1$s ."
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
#, c-format
-msgid "Event"
+msgid "Token Family: %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:90
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
#, c-format
-msgid "The event of the webhook: why the webhook is used"
+msgid "Could not update token family"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:94
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
#, c-format
-msgid "Method"
+msgid "Check the id, does not look valid"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
#, c-format
-msgid "Method used by the webhook"
+msgid "Must have 52 characters, current %1$s"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
#, c-format
-msgid "URL"
+msgid "URL doesn't have the right format"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
#, c-format
-msgid "URL of the webhook where the customer will be redirected"
+msgid "Credited bank account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
#, c-format
-msgid "Header"
+msgid "Select an account"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:106
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
#, c-format
-msgid "Header template of the webhook"
+msgid "Bank account of the merchant where the payment was received"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:111
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
#, c-format
-msgid "Body"
+msgid "Wire transfer ID"
msgstr ""
-#: src/paths/instance/webhooks/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
#, c-format
-msgid "Body template by the webhook"
+msgid ""
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
+"characters long"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:61
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
#, c-format
-msgid "Webhooks"
+msgid "Exchange URL"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:66
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
#, c-format
-msgid "add new webhooks"
+msgid ""
+"Base URL of the exchange that made the transfer, should have been in the wire "
+"transfer subject"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:137
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
#, c-format
-msgid "load more webhooks before the first one"
+msgid "Amount credited"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:141
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
#, c-format
-msgid "load newer webhooks"
+msgid "Actual amount that was wired to the merchant's bank account"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:151
+#: src/paths/instance/transfers/create/index.tsx:62
#, c-format
-msgid "Event type"
+msgid "Wire transfer informed successfully"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:176
+#: src/paths/instance/transfers/create/index.tsx:68
#, c-format
-msgid "delete selected webhook from the database"
+msgid "Could not inform transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:198
+#: src/paths/instance/transfers/list/Table.tsx:62
#, c-format
-msgid "load more webhooks after the last one"
+msgid "Transfers"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:202
+#: src/paths/instance/transfers/list/Table.tsx:67
#, c-format
-msgid "load older webhooks"
+msgid "Add new transfer"
msgstr ""
-#: src/paths/instance/webhooks/list/Table.tsx:219
+#: src/paths/instance/transfers/list/Table.tsx:120
#, c-format
-msgid "There is no webhooks yet, add more pressing the + sign"
+msgid "Load more transfers before the first one"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:94
+#: src/paths/instance/transfers/list/Table.tsx:133
#, c-format
-msgid "webhook delete successfully"
+msgid "Credit"
msgstr ""
-#: src/paths/instance/webhooks/list/index.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:136
#, c-format
-msgid "could not delete the webhook"
+msgid "Confirmed"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:63
+#: src/paths/instance/transfers/list/Table.tsx:139
#, c-format
-msgid "check the id, does not look valid"
+msgid "Verified"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:65
+#: src/paths/instance/transfers/list/Table.tsx:142
#, c-format
-msgid "should have 52 characters, current %1$s"
+msgid "Executed on"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:72
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "URL doesn't have the right format"
+msgid "yes"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#: src/paths/instance/transfers/list/Table.tsx:153
#, c-format
-msgid "Credited bank account"
+msgid "no"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:100
+#: src/paths/instance/transfers/list/Table.tsx:158
#, c-format
-msgid "Select one account"
+msgid "never"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:101
+#: src/paths/instance/transfers/list/Table.tsx:163
#, c-format
-msgid "Bank account of the merchant where the payment was received"
+msgid "unknown"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:105
+#: src/paths/instance/transfers/list/Table.tsx:169
#, c-format
-msgid "Wire transfer ID"
+msgid "Delete selected transfer from the database"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:107
+#: src/paths/instance/transfers/list/Table.tsx:184
#, c-format
-msgid ""
-"unique identifier of the wire transfer used by the exchange, must be 52 "
-"characters long"
+msgid "Load more transfers after the last one"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:112
+#: src/paths/instance/transfers/list/Table.tsx:204
#, c-format
-msgid ""
-"Base URL of the exchange that made the transfer, should have been in the wire "
-"transfer subject"
+msgid "There are no transfers yet, add more pressing the + sign"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:117
+#: src/paths/instance/transfers/list/ListPage.tsx:83
#, c-format
-msgid "Amount credited"
+msgid "All accounts"
msgstr ""
-#: src/paths/instance/transfers/create/CreatePage.tsx:118
+#: src/paths/instance/transfers/list/ListPage.tsx:84
#, c-format
-msgid "Actual amount that was wired to the merchant's bank account"
+msgid "Filter by account address"
msgstr ""
-#: src/paths/instance/transfers/create/index.tsx:58
+#: src/paths/instance/transfers/list/ListPage.tsx:105
#, c-format
-msgid "could not inform transfer"
+msgid "Only show wire transfers confirmed by the merchant"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:61
+#: src/paths/instance/transfers/list/ListPage.tsx:115
#, c-format
-msgid "Transfers"
+msgid "Only show wire transfers claimed by the exchange"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:66
+#: src/paths/instance/transfers/list/ListPage.tsx:118
#, c-format
-msgid "add new transfer"
+msgid "Unverified"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:129
+#: src/paths/instance/transfers/list/index.tsx:118
#, c-format
-msgid "load more transfers before the first one"
+msgid "Wire transfer \"%1$s...\" has been deleted"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:133
+#: src/paths/instance/transfers/list/index.tsx:123
#, c-format
-msgid "load newer transfers"
+msgid "Failed to delete transfer"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:143
+#: src/paths/admin/create/CreatePage.tsx:86
#, c-format
-msgid "Credit"
+msgid "Must be business or individual"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:152
+#: src/paths/admin/create/CreatePage.tsx:104
#, c-format
-msgid "Confirmed"
+msgid "Pay delay can't be greater than wire transfer delay"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:155
+#: src/paths/admin/create/CreatePage.tsx:112
#, c-format
-msgid "Verified"
+msgid "Max 7 lines"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:158
+#: src/paths/admin/create/CreatePage.tsx:138
#, c-format
-msgid "Executed at"
+msgid "Doesn't match"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:215
#, c-format
-msgid "yes"
+msgid "Enable access control"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:171
+#: src/paths/admin/create/CreatePage.tsx:216
#, c-format
-msgid "no"
+msgid "Choose if the backend server should authenticate access."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:181
+#: src/paths/admin/create/CreatePage.tsx:243
#, c-format
-msgid "unknown"
+msgid "Access control is not yet decided. This instance can't be created."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:187
+#: src/paths/admin/create/CreatePage.tsx:250
#, c-format
-msgid "delete selected transfer from the database"
+msgid "Authorization must be handled externally."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:202
+#: src/paths/admin/create/CreatePage.tsx:256
#, c-format
-msgid "load more transfer after the last one"
+msgid "Authorization is handled by the backend server."
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:206
+#: src/paths/admin/create/CreatePage.tsx:274
#, c-format
-msgid "load older transfers"
+msgid "Need to complete marked fields and choose authorization method"
msgstr ""
-#: src/paths/instance/transfers/list/Table.tsx:223
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
#, c-format
-msgid "There is no transfer yet, add more pressing the + sign"
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it is "
+"used to administer other instances."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:79
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
#, c-format
-msgid "filter by account address"
+msgid "Business name"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:100
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
#, c-format
-msgid "only show wire transfers confirmed by the merchant"
+msgid "Legal name of the business represented by this instance."
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:110
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
#, c-format
-msgid "only show wire transfers claimed by the exchange"
+msgid "Email"
msgstr ""
-#: src/paths/instance/transfers/list/ListPage.tsx:113
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
#, c-format
-msgid "Unverified"
+msgid "Contact email"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:69
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
#, c-format
-msgid "is not valid"
+msgid "Website URL"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:94
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
#, c-format
-msgid "is not a number"
+msgid "URL."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:96
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
#, c-format
-msgid "must be 1 or greater"
+msgid "Logo"
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:107
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
#, c-format
-msgid "max 7 lines"
+msgid "Logo image."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:178
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
#, c-format
-msgid "change authorization configuration"
+msgid "Physical location of the merchant."
msgstr ""
-#: src/paths/admin/create/CreatePage.tsx:217
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
#, c-format
-msgid "Need to complete marked fields and choose authorization method"
+msgid "Jurisdiction"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:82
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
#, c-format
-msgid "This is not a valid bitcoin address."
+msgid "Jurisdiction for legal disputes with the merchant."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:95
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
#, c-format
-msgid "This is not a valid Ethereum address."
+msgid "Pay transaction fee"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:118
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
#, c-format
-msgid "IBAN numbers usually have more that 4 digits"
+msgid "Assume the cost of the transaction of let the user pay for it."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:120
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
#, c-format
-msgid "IBAN numbers usually have less that 34 digits"
+msgid "Default payment delay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:128
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
#, c-format
-msgid "IBAN country code not found"
+msgid "Time customers have to pay an order before the offer expires by default."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:153
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
#, c-format
-msgid "IBAN number is not valid, checksum is wrong"
+msgid "Default wire transfer delay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:248
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
#, c-format
-msgid "Target type"
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:249
+#: src/paths/instance/update/UpdatePage.tsx:124
#, c-format
-msgid "Method to use for wire transfer"
+msgid "Instance id"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:258
+#: src/paths/instance/update/index.tsx:108
#, c-format
-msgid "Routing"
+msgid "Failed to update instance"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:259
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
#, c-format
-msgid "Routing number."
+msgid "Must be \"pay\" or \"refund\""
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:263
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
#, c-format
-msgid "Account"
+msgid "Must be one of '%1$s'"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:264
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
#, c-format
-msgid "Account number."
+msgid "Webhook ID to use"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:273
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
#, c-format
-msgid "Business Identifier Code."
+msgid "Event"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:282
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
#, c-format
-msgid "Bank Account Number."
+msgid "Pay"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:292
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
#, c-format
-msgid "Unified Payment Interface."
+msgid "The event of the webhook: why the webhook is used"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:301
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
#, c-format
-msgid "Bitcoin protocol."
+msgid "Method"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:310
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
#, c-format
-msgid "Ethereum protocol."
+msgid "GET"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:319
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
#, c-format
-msgid "Interledger protocol."
+msgid "POST"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:328
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
#, c-format
-msgid "Host"
+msgid "PUT"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:329
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
#, c-format
-msgid "Bank host."
+msgid "PATCH"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:334
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
#, c-format
-msgid "Bank account."
+msgid "HEAD"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:343
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
#, c-format
-msgid "Bank account owner's name."
+msgid "Method used by the webhook"
msgstr ""
-#: src/components/form/InputPaytoForm.tsx:370
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
#, c-format
-msgid "No accounts yet."
+msgid "URL"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:52
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
+#, c-format
+msgid "URL of the webhook where the customer will be redirected"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
#, c-format
msgid ""
-"Name of the instance in URLs. The 'default' instance is special in that it is "
-"used to administer other instances."
+"The text below support %1$s template engine. Any string between %2$s and %3$s "
+"will be replaced with replaced with the value of the corresponding variable."
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:58
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
#, c-format
-msgid "Business name"
+msgid "For example %1$s will be replaced with the the order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
#, c-format
-msgid "Legal name of the business represented by this instance."
+msgid "The short list of variables are:"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:64
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
#, c-format
-msgid "Email"
+msgid "order's description"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:65
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
#, c-format
-msgid "Contact email"
+msgid "order's price"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:70
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
#, c-format
-msgid "Website URL"
+msgid "order's unique identification"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:71
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
#, c-format
-msgid "URL."
+msgid "the amount that was being refunded"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:76
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
#, c-format
-msgid "Logo"
+msgid "the reason entered by the merchant staff for granting the refund"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:77
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
#, c-format
-msgid "Logo image."
+msgid "time of the refund in nanoseconds since 1970"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:82
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
#, c-format
-msgid "Bank account"
+msgid "Http body"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:83
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
#, c-format
-msgid "URI specifying bank account for crediting revenue."
+msgid "Body template by the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:88
+#: src/paths/instance/webhooks/create/index.tsx:52
#, c-format
-msgid "Default max deposit fee"
+msgid "Webhook create successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:89
+#: src/paths/instance/webhooks/create/index.tsx:58
#, c-format
-msgid "Maximum deposit fees this merchant is willing to pay per order by default."
+msgid "Could not create the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#: src/paths/instance/webhooks/create/index.tsx:66
#, c-format
-msgid "Default max wire fee"
+msgid "Could not create webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:95
+#: src/paths/instance/webhooks/list/Table.tsx:57
#, c-format
-msgid "Maximum wire fees this merchant is willing to pay per wire transfer by default."
+msgid "Webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:100
+#: src/paths/instance/webhooks/list/Table.tsx:62
#, c-format
-msgid "Default wire fee amortization"
+msgid "Add new webhooks"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#: src/paths/instance/webhooks/list/Table.tsx:117
#, c-format
-msgid ""
-"Number of orders excess wire transfer fees will be divided by to compute per "
-"order surcharge."
+msgid "Load more webhooks before the first one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#: src/paths/instance/webhooks/list/Table.tsx:130
#, c-format
-msgid "Physical location of the merchant."
+msgid "Event type"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#: src/paths/instance/webhooks/list/Table.tsx:155
#, c-format
-msgid "Jurisdiction"
+msgid "Delete selected webhook from the database"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#: src/paths/instance/webhooks/list/Table.tsx:170
#, c-format
-msgid "Jurisdiction for legal disputes with the merchant."
+msgid "Load more webhooks after the last one"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:122
+#: src/paths/instance/webhooks/list/Table.tsx:190
#, c-format
-msgid "Default payment delay"
+msgid "There are no webhooks yet, add more pressing the + sign"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:124
+#: src/paths/instance/webhooks/list/index.tsx:88
#, c-format
-msgid "Time customers have to pay an order before the offer expires by default."
+msgid "Webhook delete successfully"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:129
+#: src/paths/instance/webhooks/list/index.tsx:93
#, c-format
-msgid "Default wire transfer delay"
+msgid "Could not delete the webhook"
msgstr ""
-#: src/components/instance/DefaultInstanceFormFields.tsx:130
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
#, c-format
-msgid ""
-"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
-"enabling it to aggregate smaller payments into larger wire transfers and "
-"reducing wire fees."
+msgid "Header"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:164
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
#, c-format
-msgid "Instance id"
+msgid "Header template of the webhook"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:173
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
#, c-format
-msgid "Change the authorization method use for this instance."
+msgid "Body"
msgstr ""
-#: src/paths/instance/update/UpdatePage.tsx:182
+#: src/paths/instance/webhooks/update/index.tsx:88
#, c-format
-msgid "Manage access token"
+msgid "Webhook updated"
msgstr ""
-#: src/paths/instance/update/index.tsx:112
+#: src/paths/instance/webhooks/update/index.tsx:94
#, c-format
-msgid "Failed to create instance"
+msgid "Could not update webhook"
msgstr ""
-#: src/components/exception/login.tsx:74
+#: src/paths/settings/index.tsx:73
#, c-format
-msgid "Login required"
+msgid "Language"
msgstr ""
-#: src/components/exception/login.tsx:80
+#: src/paths/settings/index.tsx:89
#, c-format
-msgid "Please enter your access token."
+msgid "Advance order creation"
msgstr ""
-#: src/components/exception/login.tsx:108
+#: src/paths/settings/index.tsx:90
#, c-format
-msgid "Access Token"
+msgid "Shows more options in the order creation form"
msgstr ""
-#: src/InstanceRoutes.tsx:171
+#: src/paths/settings/index.tsx:94
#, c-format
-msgid "The request to the backend take too long and was cancelled"
+msgid "Advance instance settings"
msgstr ""
-#: src/InstanceRoutes.tsx:172
+#: src/paths/settings/index.tsx:95
#, c-format
-msgid "Diagnostic from %1$s is \"%2$s\""
+msgid "Shows more options in the instance settings form"
msgstr ""
-#: src/InstanceRoutes.tsx:178
+#: src/paths/settings/index.tsx:100
#, c-format
-msgid "The backend reported a problem: HTTP status #%1$s"
+msgid "Date format"
msgstr ""
-#: src/InstanceRoutes.tsx:179
+#: src/paths/settings/index.tsx:118
#, c-format
-msgid "Diagnostic from %1$s is '%2$s'"
+msgid "How the date is going to be displayed"
msgstr ""
-#: src/InstanceRoutes.tsx:196
+#: src/paths/settings/index.tsx:121
#, c-format
-msgid "Access denied"
+msgid "Developer mode"
msgstr ""
-#: src/InstanceRoutes.tsx:197
+#: src/paths/settings/index.tsx:122
#, c-format
-msgid "The access token provided is invalid."
+msgid "Shows more options and tools which are not intended for general audience."
msgstr ""
-#: src/InstanceRoutes.tsx:212
+#: src/paths/instance/categories/list/Table.tsx:133
#, c-format
-msgid "No 'default' instance configured yet."
+msgid "Total products"
msgstr ""
-#: src/InstanceRoutes.tsx:213
+#: src/paths/instance/categories/list/Table.tsx:164
#, c-format
-msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgid "Delete selected category from the database"
msgstr ""
-#: src/InstanceRoutes.tsx:630
+#: src/paths/instance/categories/list/Table.tsx:199
#, c-format
-msgid "The access token provided is invalid"
+msgid "There are no categories yet, add more pressing the + sign"
msgstr ""
-#: src/InstanceRoutes.tsx:664
+#: src/paths/instance/categories/list/index.tsx:90
#, c-format
-msgid "Hide for today"
+msgid "Category delete successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:82
+#: src/paths/instance/categories/list/index.tsx:95
#, c-format
-msgid "Instance"
+msgid "Could not delete the category"
msgstr ""
-#: src/components/menu/SideBar.tsx:91
+#: src/paths/instance/categories/create/CreatePage.tsx:75
#, c-format
-msgid "Settings"
+msgid "Category name"
msgstr ""
-#: src/components/menu/SideBar.tsx:167
+#: src/paths/instance/categories/create/index.tsx:53
#, c-format
-msgid "Connection"
+msgid "Category added successfully"
msgstr ""
-#: src/components/menu/SideBar.tsx:209
+#: src/paths/instance/categories/create/index.tsx:59
#, c-format
-msgid "New"
+msgid "Could not add category"
msgstr ""
-#: src/components/menu/SideBar.tsx:219
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
#, c-format
-msgid "List"
+msgid "Id:"
msgstr ""
-#: src/components/menu/SideBar.tsx:234
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
#, c-format
-msgid "Log out"
+msgid "Name of the category"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
+#, c-format
+msgid "Products"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
+#, c-format
+msgid "Search by product description or id"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
+#, c-format
+msgid "Products that this category will list."
+msgstr ""
+
+#: src/paths/instance/categories/update/index.tsx:93
+#, c-format
+msgid "Could not update category"
+msgstr ""
+
+#: src/paths/instance/categories/update/index.tsx:95
+#, c-format
+msgid "Category id is unknown"
+msgstr ""
+
+#: src/Routing.tsx:665
+#, c-format
+msgid "Without this the merchant backend will refuse to create new orders."
+msgstr ""
+
+#: src/Routing.tsx:675
+#, c-format
+msgid "Hide for today"
+msgstr ""
+
+#: src/Routing.tsx:711
+#, c-format
+msgid "KYC verification needed"
+msgstr ""
+
+#: src/Routing.tsx:715
+#, c-format
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:71
+#: src/components/menu/SideBar.tsx:167
+#, c-format
+msgid "Configuration"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:206
#, c-format
-msgid "Check your token is valid"
+msgid "Settings"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:90
+#: src/components/menu/SideBar.tsx:216
#, c-format
-msgid "Couldn't access the server."
+msgid "Access token"
msgstr ""
-#: src/ApplicationReadyRoutes.tsx:91
+#: src/components/menu/SideBar.tsx:224
#, c-format
-msgid "Could not infer instance id from url %1$s"
+msgid "Connection"
msgstr ""
-#: src/Application.tsx:104
+#: src/components/menu/SideBar.tsx:233
#, c-format
-msgid "Server not found"
+msgid "Interface"
msgstr ""
-#: src/Application.tsx:118
+#: src/components/menu/SideBar.tsx:274
#, c-format
-msgid "Server response with an error code"
+msgid "List"
msgstr ""
-#: src/Application.tsx:120
+#: src/components/menu/SideBar.tsx:293
#, c-format
-msgid "Got message %1$s from %2$s"
+msgid "Log out"
msgstr ""
-#: src/Application.tsx:131
+#: src/paths/admin/create/index.tsx:54
#, c-format
-msgid "Response from server is unreadable, http status: %1$s"
+msgid "Failed to create instance"
msgstr ""
-#: src/Application.tsx:144
+#: src/Application.tsx:208
#, c-format
-msgid "Unexpected Error"
+msgid "checking compatibility with server..."
msgstr ""
-#: src/components/form/InputArray.tsx:101
+#: src/Application.tsx:217
#, c-format
-msgid "The value %1$s is invalid for a payment url"
+msgid "Contacting the server failed"
msgstr ""
-#: src/components/form/InputArray.tsx:110
+#: src/Application.tsx:229
#, c-format
-msgid "add element to the list"
+msgid "The server version is not supported"
msgstr ""
-#: src/components/form/InputArray.tsx:112
+#: src/Application.tsx:230
#, c-format
-msgid "add"
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
msgstr ""
#: src/components/form/InputSecured.tsx:37
@@ -2714,12 +3652,22 @@ msgstr ""
msgid "Changing"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:87
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr ""
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, c-format
+msgid "Business Name"
+msgstr ""
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
#, c-format
msgid "Order ID"
msgstr ""
-#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:101
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
#, c-format
msgid "Payment URL"
msgstr ""
diff --git a/packages/merchant-backoffice-ui/src/i18n/tr.po b/packages/merchant-backoffice-ui/src/i18n/tr.po
new file mode 100644
index 000000000..41c787e68
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/i18n/tr.po
@@ -0,0 +1,3696 @@
+# This file is part of GNU Taler
+# (C) 2021-2023 Taler Systems S.A.
+# GNU Taler is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+# GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# You should have received a copy of the GNU General Public License along with
+# GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Taler Wallet\n"
+"Report-Msgid-Bugs-To: taler@gnu.org\n"
+"PO-Revision-Date: 2024-11-05 15:40+0000\n"
+"Last-Translator: Stefan Kügel <stefan.kuegel@taler.net>\n"
+"Language-Team: Turkish <https://weblate.taler.net/projects/gnu-taler/"
+"merchant-backoffice/tr/>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.5.5\n"
+
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, c-format
+msgid "Unexpected request error."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, c-format
+msgid "Unexpected error."
+msgstr ""
+
+#: src/components/modal/index.tsx:81
+#, fuzzy, c-format
+msgid "Cancel"
+msgstr "İptal"
+
+#: src/components/modal/index.tsx:89
+#, c-format
+msgid "%1$s"
+msgstr "%1$s"
+
+#: src/components/modal/index.tsx:94
+#, c-format
+msgid "Close"
+msgstr ""
+
+#: src/components/modal/index.tsx:134
+#, c-format
+msgid "Continue"
+msgstr ""
+
+#: src/components/modal/index.tsx:194
+#, c-format
+msgid "Clear"
+msgstr ""
+
+#: src/components/modal/index.tsx:206
+#, c-format
+msgid "Confirm"
+msgstr ""
+
+#: src/components/modal/index.tsx:248
+#, c-format
+msgid "Required"
+msgstr ""
+
+#: src/components/modal/index.tsx:250
+#, c-format
+msgid "Letter must be a JSON string"
+msgstr ""
+
+#: src/components/modal/index.tsx:252
+#, c-format
+msgid "JSON string is invalid"
+msgstr ""
+
+#: src/components/modal/index.tsx:257
+#, c-format
+msgid "Import"
+msgstr ""
+
+#: src/components/modal/index.tsx:258
+#, c-format
+msgid "Importing an account from the bank"
+msgstr ""
+
+#: src/components/modal/index.tsx:265
+#, c-format
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
+msgstr ""
+
+#: src/components/modal/index.tsx:273
+#, c-format
+msgid "Account information"
+msgstr ""
+
+#: src/components/modal/index.tsx:338
+#, c-format
+msgid "Correct form"
+msgstr ""
+
+#: src/components/modal/index.tsx:339
+#, c-format
+msgid "Comparing account details"
+msgstr ""
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr ""
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr ""
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr ""
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr ""
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr ""
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr ""
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr ""
+
+#: src/components/modal/index.tsx:402
+#, fuzzy, c-format
+msgid "Account id"
+msgstr "Hesap"
+
+#: src/components/modal/index.tsx:413
+#, c-format
+msgid "Owner's name"
+msgstr ""
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr "Hesap"
+
+#: src/components/modal/index.tsx:445
+#, fuzzy, c-format
+msgid "Bank host"
+msgstr "Banka hesabı"
+
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr "Banka hesabı"
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr ""
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr ""
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
+msgstr ""
+
+#: src/components/modal/index.tsx:487
+#, c-format
+msgid "Step 1:"
+msgstr ""
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
+msgstr ""
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr "Konu"
+
+#: src/components/modal/index.tsx:499
+#, c-format
+msgid "Step 2:"
+msgstr ""
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
+msgstr ""
+
+#: src/components/modal/index.tsx:509
+#, fuzzy, c-format
+msgid "Receiver name"
+msgstr "Teslim tarihi"
+
+#: src/components/modal/index.tsx:514
+#, c-format
+msgid "Step 3:"
+msgstr ""
+
+#: src/components/modal/index.tsx:516
+#, c-format
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
+msgstr ""
+
+#: src/components/modal/index.tsx:536
+#, c-format
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
+msgstr ""
+
+#: src/components/modal/index.tsx:549
+#, c-format
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
+msgstr ""
+
+#: src/components/modal/index.tsx:694
+#, c-format
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
+msgstr ""
+
+#: src/components/modal/index.tsx:701
+#, c-format
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
+msgstr ""
+
+#: src/components/modal/index.tsx:708
+#, c-format
+msgid "Deleting an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
+msgstr ""
+
+#: src/components/modal/index.tsx:743
+#, c-format
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
+msgstr ""
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:786
+#, c-format
+msgid "Is not the same as the current access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:791
+#, c-format
+msgid "Can't be the same as the old token"
+msgstr ""
+
+#: src/components/modal/index.tsx:795
+#, c-format
+msgid "Is not the same"
+msgstr ""
+
+#: src/components/modal/index.tsx:803
+#, c-format
+msgid "You are updating the access token for the instance with id %1$s"
+msgstr ""
+
+#: src/components/modal/index.tsx:819
+#, c-format
+msgid "Old access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:820
+#, c-format
+msgid "Access token currently in use"
+msgstr ""
+
+#: src/components/modal/index.tsx:826
+#, c-format
+msgid "New access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:827
+#, c-format
+msgid "Next access token to be used"
+msgstr ""
+
+#: src/components/modal/index.tsx:832
+#, c-format
+msgid "Repeat access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:833
+#, c-format
+msgid "Confirm the same access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:838
+#, c-format
+msgid "Clearing the access token will mean public access to the instance"
+msgstr ""
+
+#: src/components/modal/index.tsx:865
+#, c-format
+msgid "Can't be the same as the old access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:880
+#, c-format
+msgid "You are setting the access token for the new instance"
+msgstr ""
+
+#: src/components/modal/index.tsx:906
+#, c-format
+msgid ""
+"With external authorization method no check will be done by the merchant "
+"backend"
+msgstr ""
+
+#: src/components/modal/index.tsx:922
+#, c-format
+msgid "Set external authorization"
+msgstr ""
+
+#: src/components/modal/index.tsx:934
+#, c-format
+msgid "Set access token"
+msgstr ""
+
+#: src/components/modal/index.tsx:956
+#, c-format
+msgid "Operation in progress..."
+msgstr ""
+
+#: src/components/modal/index.tsx:965
+#, c-format
+msgid "The operation will be automatically canceled after %1$s seconds"
+msgstr ""
+
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr ""
+
+#: src/paths/login/index.tsx:70
+#, c-format
+msgid "Your instance cannot be found"
+msgstr ""
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr ""
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr ""
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:79
+#, c-format
+msgid "Instances"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:92
+#, c-format
+msgid "Delete"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:98
+#, c-format
+msgid "Add new instance"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:175
+#, c-format
+msgid "ID"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:178
+#, c-format
+msgid "Name"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:220
+#, c-format
+msgid "Edit"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:237
+#, c-format
+msgid "Purge"
+msgstr ""
+
+#: src/paths/admin/list/TableActive.tsx:261
+#, c-format
+msgid "There are no instances yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/admin/list/View.tsx:66
+#, c-format
+msgid "Only show active instances"
+msgstr ""
+
+#: src/paths/admin/list/View.tsx:69
+#, c-format
+msgid "Active"
+msgstr ""
+
+#: src/paths/admin/list/View.tsx:76
+#, c-format
+msgid "Only show deleted instances"
+msgstr ""
+
+#: src/paths/admin/list/View.tsx:79
+#, c-format
+msgid "Deleted"
+msgstr ""
+
+#: src/paths/admin/list/View.tsx:86
+#, c-format
+msgid "Show all instances"
+msgstr ""
+
+#: src/paths/admin/list/View.tsx:89
+#, c-format
+msgid "All"
+msgstr ""
+
+#: src/paths/admin/list/index.tsx:100
+#, c-format
+msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
+msgstr ""
+
+#: src/paths/admin/list/index.tsx:105
+#, c-format
+msgid "Failed to delete instance"
+msgstr ""
+
+#: src/paths/admin/list/index.tsx:140
+#, c-format
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
+msgstr ""
+
+#: src/paths/admin/list/index.tsx:145
+#, c-format
+msgid "Failed to purge instance"
+msgstr ""
+
+#: src/components/exception/AsyncButton.tsx:43
+#, c-format
+msgid "Loading..."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:86
+#, c-format
+msgid "This is not a valid bitcoin address."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:99
+#, c-format
+msgid "This is not a valid Ethereum address."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:128
+#, c-format
+msgid "This is not a valid host."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:151
+#, c-format
+msgid "IBAN numbers usually have more that 4 digits"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:153
+#, c-format
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:330
+#, c-format
+msgid "Code"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, c-format
+msgid "International Bank Account Number."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, fuzzy, c-format
+msgid "Invalid url"
+msgstr "Geçerlilik"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr "Hesap:"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, c-format
+msgid "Auth type"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, c-format
+msgid "With token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, c-format
+msgid "Do not change"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, c-format
+msgid "Not verified"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, fuzzy, c-format
+msgid "Confirm operation"
+msgstr "Kasaba konumu"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, fuzzy, c-format
+msgid "Account details"
+msgstr "Hesap"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr ""
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, c-format
+msgid "Could not create account"
+msgstr ""
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr ""
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, fuzzy, c-format
+msgid "Bank accounts"
+msgstr "Banka hesabı"
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, fuzzy, c-format
+msgid "Add new account"
+msgstr "Banka hesabı"
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, c-format
+msgid "Wire method: Bitcoin"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, c-format
+msgid "Delete selected accounts from the database"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, c-format
+msgid "Wire method: x-taler-bank"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, fuzzy, c-format
+msgid "Account name"
+msgstr "Hesap"
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, c-format
+msgid "Wire method: IBAN"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, fuzzy, c-format
+msgid "Other accounts"
+msgstr "Banka hesabı"
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr ""
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format
+msgid "Reason"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:140
+#, c-format
+msgid "The exchange require a account verification."
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
+#, c-format
+msgid "Http Status"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:199
+#, c-format
+msgid "No pending kyc verification!"
+msgstr ""
+
+#: src/components/form/InputDate.tsx:127
+#, c-format
+msgid "Change value to unknown date"
+msgstr ""
+
+#: src/components/form/InputDate.tsx:128
+#, c-format
+msgid "Change value to empty"
+msgstr ""
+
+#: src/components/form/InputDate.tsx:140
+#, c-format
+msgid "Change value to never"
+msgstr ""
+
+#: src/components/form/InputDate.tsx:145
+#, c-format
+msgid "Never"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:55
+#, c-format
+msgid "days"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:65
+#, c-format
+msgid "hours"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:76
+#, c-format
+msgid "minutes"
+msgstr ""
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:62
+#, c-format
+msgid "Forever"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr ""
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr ""
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
+msgstr "Ülke"
+
+#: src/components/form/InputLocation.tsx:39
+#, c-format
+msgid "Building number"
+msgstr "Bina numarası"
+
+#: src/components/form/InputLocation.tsx:41
+#, c-format
+msgid "Building name"
+msgstr "Bina adı"
+
+#: src/components/form/InputLocation.tsx:42
+#, c-format
+msgid "Street"
+msgstr "Sokak"
+
+#: src/components/form/InputLocation.tsx:43
+#, c-format
+msgid "Post code"
+msgstr "Posta kodu"
+
+#: src/components/form/InputLocation.tsx:44
+#, c-format
+msgid "Town location"
+msgstr "Kasaba konumu"
+
+#: src/components/form/InputLocation.tsx:45
+#, c-format
+msgid "Town"
+msgstr "Kasaba"
+
+#: src/components/form/InputLocation.tsx:46
+#, c-format
+msgid "District"
+msgstr "Semt"
+
+#: src/components/form/InputLocation.tsx:49
+#, c-format
+msgid "Country subdivision"
+msgstr ""
+
+#: src/components/form/InputSearchOnList.tsx:80
+#, c-format
+msgid "Description"
+msgstr ""
+
+#: src/components/form/InputSearchOnList.tsx:106
+#, c-format
+msgid "Enter description or id"
+msgstr ""
+
+#: src/components/form/InputSearchOnList.tsx:164
+#, c-format
+msgid "no match found with that description or id"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:57
+#, c-format
+msgid "You must enter a valid product identifier."
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:65
+#, c-format
+msgid "Quantity must be greater than 0!"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:77
+#, c-format
+msgid ""
+"This quantity exceeds remaining stock. Currently, only %1$s units remain "
+"unreserved in stock."
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:100
+#, c-format
+msgid "Search product"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:112
+#, c-format
+msgid "Quantity"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:113
+#, c-format
+msgid "How many products will be added"
+msgstr ""
+
+#: src/components/product/InventoryProductForm.tsx:120
+#, c-format
+msgid "Add from inventory"
+msgstr ""
+
+#: src/components/form/InputImage.tsx:107
+#, c-format
+msgid "Image must be smaller than 1 MB"
+msgstr ""
+
+#: src/components/form/InputImage.tsx:112
+#, c-format
+msgid "Add"
+msgstr ""
+
+#: src/components/form/InputImage.tsx:122
+#, c-format
+msgid "Remove"
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:47
+#, c-format
+msgid "Invalid"
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:103
+#, c-format
+msgid "No taxes configured for this product."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:109
+#, c-format
+msgid "Amount"
+msgstr "Miktar"
+
+#: src/components/form/InputTaxes.tsx:110
+#, c-format
+msgid ""
+"Taxes can be in currencies that differ from the main currency used by the "
+"merchant."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:112
+#, c-format
+msgid ""
+"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:121
+#, c-format
+msgid "Legal name of the tax, e.g. VAT or import duties."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:127
+#, c-format
+msgid "Add tax to the tax list"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:71
+#, c-format
+msgid "Describe and add a product that is not in the inventory list"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:74
+#, c-format
+msgid "Add custom product"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:85
+#, c-format
+msgid "Complete information of the product"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, c-format
+msgid "Must be a number"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, c-format
+msgid "Must be grater than 0"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:185
+#, c-format
+msgid "Image"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:186
+#, c-format
+msgid "Photo of the product."
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:192
+#, c-format
+msgid "Full product description."
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:196
+#, c-format
+msgid "Unit"
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:197
+#, c-format
+msgid "Name of the product unit."
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:201
+#, c-format
+msgid "Price"
+msgstr "Fiyat"
+
+#: src/components/product/NonInventoryProductForm.tsx:202
+#, c-format
+msgid "Amount in the current currency."
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:208
+#, c-format
+msgid "How many products will be added."
+msgstr ""
+
+#: src/components/product/NonInventoryProductForm.tsx:211
+#, c-format
+msgid "Taxes"
+msgstr ""
+
+#: src/components/product/ProductList.tsx:46
+#, c-format
+msgid "Unit price"
+msgstr ""
+
+#: src/components/product/ProductList.tsx:49
+#, c-format
+msgid "Total price"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:162
+#, c-format
+msgid "Must be greater than 0"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:173
+#, c-format
+msgid "Refund deadline can't be before pay deadline"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:179
+#, c-format
+msgid "Wire transfer deadline can't be before refund deadline"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:188
+#, c-format
+msgid "Wire transfer deadline can't be before pay deadline"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:196
+#, fuzzy, c-format
+msgid "Must have a refund deadline"
+msgstr "Geri ödeme son tarihi"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:201
+#, c-format
+msgid "Auto refund can't be after refund deadline"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:208
+#, c-format
+msgid "Must be in the future"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:376
+#, c-format
+msgid "Simple"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:388
+#, c-format
+msgid "Advanced"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:400
+#, c-format
+msgid "Manage products in order"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:404
+#, c-format
+msgid "%1$s products with a total price of %2$s."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:411
+#, c-format
+msgid "Manage list of products in the order."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:435
+#, c-format
+msgid "Remove this product from the order."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:461
+#, c-format
+msgid "Total product price added up"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:474
+#, c-format
+msgid "Amount to be paid by the customer"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:480
+#, c-format
+msgid "Order price"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:481
+#, c-format
+msgid "Final order price"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:488
+#, c-format
+msgid "Summary"
+msgstr "Özet"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:489
+#, c-format
+msgid "Title of the order to be shown to the customer"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:495
+#, c-format
+msgid "Shipping and fulfillment"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:500
+#, c-format
+msgid "Delivery date"
+msgstr "Teslim tarihi"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:501
+#, c-format
+msgid "Deadline for physical delivery assured by the merchant."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:506
+#, c-format
+msgid "Location"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:507
+#, c-format
+msgid "Address where the products will be delivered"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:514
+#, c-format
+msgid "Fulfillment URL"
+msgstr "Gönderim URL'si"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:515
+#, c-format
+msgid "URL to which the user will be redirected after successful payment."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:523
+#, c-format
+msgid "Taler payment options"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:524
+#, c-format
+msgid "Override default Taler payment settings for this order"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:529
+#, c-format
+msgid "Payment time"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:535
+#, c-format
+msgid ""
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:552
+#, c-format
+msgid "Default"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:561
+#, fuzzy, c-format
+msgid "Refund time"
+msgstr "İade edildi"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:569
+#, c-format
+msgid ""
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:594
+#, c-format
+msgid "Wire transfer time"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:602
+#, c-format
+msgid ""
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:628
+#, c-format
+msgid "Auto-refund time"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:634
+#, c-format
+msgid ""
+"Time until which the wallet will automatically check for refunds without "
+"user interaction."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:642
+#, fuzzy, c-format
+msgid "Maximum fee"
+msgstr "Azami ücret"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:643
+#, c-format
+msgid ""
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:649
+#, c-format
+msgid "Create token"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:650
+#, c-format
+msgid ""
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:656
+#, c-format
+msgid "Minimum age required"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:657
+#, c-format
+msgid ""
+"Any value greater than 0 will limit the coins able be used to pay this "
+"contract. If empty the age restriction will be defined by the products"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:660
+#, c-format
+msgid "Min age defined by the producs is %1$s"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:661
+#, c-format
+msgid "No product with age restriction in this order"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:671
+#, c-format
+msgid "Additional information"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:672
+#, c-format
+msgid "Custom information to be included in the contract for this order."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:681
+#, c-format
+msgid "You must enter a value in JavaScript Object Notation (JSON)."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:707
+#, fuzzy, c-format
+msgid "Custom field name"
+msgstr "Bina adı"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:793
+#, c-format
+msgid "Disabled"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:796
+#, fuzzy, c-format
+msgid "No deadline"
+msgstr "Geri ödeme son tarihi"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:797
+#, c-format
+msgid "Deadline at %1$s"
+msgstr ""
+
+#: src/paths/instance/orders/create/index.tsx:109
+#, c-format
+msgid "Could not create order"
+msgstr ""
+
+#: src/paths/instance/orders/create/index.tsx:111
+#, c-format
+msgid "No exchange would accept a payment because of KYC requirements."
+msgstr ""
+
+#: src/paths/instance/orders/create/index.tsx:129
+#, c-format
+msgid "No more stock for product with ID \"%1$s\"."
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:75
+#, c-format
+msgid "Orders"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:81
+#, fuzzy, c-format
+msgid "Create order"
+msgstr "Oluşturulma"
+
+#: src/paths/instance/orders/list/Table.tsx:138
+#, c-format
+msgid "Load first page"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:145
+#, c-format
+msgid "Date"
+msgstr "Tarih"
+
+#: src/paths/instance/orders/list/Table.tsx:191
+#, c-format
+msgid "Refund"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:200
+#, c-format
+msgid "copy url"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:213
+#, c-format
+msgid "Load more orders after the last one"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:216
+#, c-format
+msgid "Load next page"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:233
+#, c-format
+msgid "No orders have been found matching your query!"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:280
+#, c-format
+msgid "Duplicated"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:293
+#, c-format
+msgid "This value exceed the refundable amount"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:381
+#, c-format
+msgid "Amount to be refunded"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:383
+#, c-format
+msgid "Max refundable:"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:391
+#, c-format
+msgid "Requested by the customer"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:392
+#, c-format
+msgid "Other"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:395
+#, c-format
+msgid "Why this order is being refunded"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:401
+#, c-format
+msgid "More information to give context"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:70
+#, c-format
+msgid "Contract terms"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:76
+#, c-format
+msgid "Human-readable description of the whole purchase"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:82
+#, c-format
+msgid "Total price for the transaction"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:89
+#, c-format
+msgid "URL for this purchase"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:95
+#, c-format
+msgid "Max fee"
+msgstr "Azami ücret"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:96
+#, c-format
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:101
+#, c-format
+msgid "Created at"
+msgstr "Oluşturulma"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:102
+#, c-format
+msgid "Time when this contract was generated"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:107
+#, c-format
+msgid "Refund deadline"
+msgstr "Geri ödeme son tarihi"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:108
+#, c-format
+msgid "After this deadline has passed no refunds will be accepted"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:113
+#, c-format
+msgid "Payment deadline"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:114
+#, c-format
+msgid ""
+"After this deadline, the merchant won't accept payments for the contract"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:119
+#, c-format
+msgid "Wire transfer deadline"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:120
+#, c-format
+msgid "Transfer deadline for the exchange"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:126
+#, c-format
+msgid "Time indicating when the order should be delivered"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:132
+#, c-format
+msgid "Where the order will be delivered"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:140
+#, c-format
+msgid "Auto-refund delay"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:141
+#, c-format
+msgid ""
+"How long the wallet should try to get an automatic refund for the purchase"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:146
+#, c-format
+msgid "Extra info"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:147
+#, c-format
+msgid "Extra data that is only interpreted by the merchant frontend"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:220
+#, c-format
+msgid "Order"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:222
+#, c-format
+msgid "Claimed"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:249
+#, fuzzy, c-format
+msgid "Claimed at"
+msgstr "Oluşturulma"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:271
+#, c-format
+msgid "Timeline"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:277
+#, c-format
+msgid "Payment details"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:297
+#, c-format
+msgid "Order status"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:307
+#, c-format
+msgid "Product list"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:459
+#, c-format
+msgid "Paid"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:463
+#, c-format
+msgid "Wired"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:468
+#, c-format
+msgid "Refunded"
+msgstr "İade edildi"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:488
+#, fuzzy, c-format
+msgid "Refund order"
+msgstr "İade edildi"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:489
+#, c-format
+msgid "Not refundable"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:519
+#, c-format
+msgid "Next event in"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:555
+#, c-format
+msgid "Refunded amount"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:562
+#, c-format
+msgid "Refund taken"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:572
+#, c-format
+msgid "Status URL"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:585
+#, c-format
+msgid "Refund URI"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:639
+#, c-format
+msgid "Unpaid"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:657
+#, c-format
+msgid "Pay at"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:710
+#, c-format
+msgid "Order status URL"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:714
+#, c-format
+msgid "Payment URI"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:743
+#, c-format
+msgid ""
+"Unknown order status. This is an error, please contact the administrator."
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:770
+#, c-format
+msgid "Back"
+msgstr ""
+
+#: src/paths/instance/orders/details/index.tsx:88
+#, c-format
+msgid "Refund created successfully"
+msgstr ""
+
+#: src/paths/instance/orders/details/index.tsx:95
+#, c-format
+msgid "Could not create the refund"
+msgstr ""
+
+#: src/paths/instance/orders/details/index.tsx:97
+#, c-format
+msgid "There are pending KYC requirements."
+msgstr ""
+
+#: src/components/form/JumpToElementById.tsx:39
+#, c-format
+msgid "Missing id"
+msgstr ""
+
+#: src/components/form/JumpToElementById.tsx:48
+#, c-format
+msgid "Not found"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:83
+#, c-format
+msgid "Select date to show nearby orders"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:96
+#, c-format
+msgid "Only show paid orders"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:99
+#, c-format
+msgid "New"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:116
+#, c-format
+msgid "Only show orders with refunds"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:126
+#, c-format
+msgid ""
+"Only show orders where customers paid, but wire payments from payment "
+"provider are still pending"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:129
+#, c-format
+msgid "Not wired"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:139
+#, c-format
+msgid "Completed"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:146
+#, c-format
+msgid "Remove all filters"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:164
+#, c-format
+msgid "Clear date filter"
+msgstr ""
+
+#: src/paths/instance/orders/list/ListPage.tsx:178
+#, c-format
+msgid "Jump to date (%1$s)"
+msgstr ""
+
+#: src/paths/instance/orders/list/index.tsx:113
+#, c-format
+msgid "Jump to order with the given product ID"
+msgstr ""
+
+#: src/paths/instance/orders/list/index.tsx:114
+#, c-format
+msgid "Order id"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
+#, c-format
+msgid "Invalid. Please insert only characters and numbers"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
+#, c-format
+msgid "Just letters and numbers from 2 to 7"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
+#, c-format
+msgid "Size of the key must be 32"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
+#, c-format
+msgid "Internal id on the system"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
+#, c-format
+msgid "Useful to identify the device physically"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
+#, c-format
+msgid "Verification algorithm"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
+#, c-format
+msgid "Algorithm to use to verify transaction in offline mode"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
+#, c-format
+msgid "Device key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
+#, c-format
+msgid "Be sure to be very hard to guess or use the random generator"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
+#, c-format
+msgid "Your device need to have exactly the same value"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
+#, c-format
+msgid "Generate random secret key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
+#, c-format
+msgid "Random"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
+#, c-format
+msgid ""
+"You can scan the next QR code with your device or save the key before "
+"continuing."
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/index.tsx:60
+#, c-format
+msgid "Device added successfully"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/index.tsx:66
+#, c-format
+msgid "Could not add device"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:57
+#, c-format
+msgid "OTP Devices"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:62
+#, c-format
+msgid "Add new devices"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:117
+#, c-format
+msgid "Load more devices before the first one"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:155
+#, c-format
+msgid "Delete selected devices from the database"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:170
+#, c-format
+msgid "Load more devices after the last one"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:90
+#, c-format
+msgid "Device delete successfully"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/index.tsx:95
+#, c-format
+msgid "Could not delete the device"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
+#, c-format
+msgid "Device:"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
+#, c-format
+msgid "Not modified"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
+#, c-format
+msgid "Change key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:119
+#, c-format
+msgid "Could not update template"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:121
+#, c-format
+msgid "Template id is unknown"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:129
+#, c-format
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:99
+#, c-format
+msgid ""
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
+msgstr ""
+
+#: src/components/form/InputStock.tsx:109
+#, c-format
+msgid "Manage stock"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:115
+#, c-format
+msgid "This product has been configured without stock control"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:119
+#, c-format
+msgid "Infinite"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:136
+#, c-format
+msgid "Lost can't be greater than current and incoming (max %1$s)"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:169
+#, c-format
+msgid "Incoming"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:170
+#, c-format
+msgid "Lost"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:185
+#, c-format
+msgid "Current"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:189
+#, c-format
+msgid "Remove stock control for this product"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:195
+#, c-format
+msgid "without stock"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:204
+#, c-format
+msgid "Next restock"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:208
+#, c-format
+msgid "Warehouse address"
+msgstr ""
+
+#: src/components/form/InputArray.tsx:118
+#, c-format
+msgid "Add element to the list"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:120
+#, fuzzy, c-format
+msgid "Invalid amount"
+msgstr "Geçerlilik"
+
+#: src/components/product/ProductForm.tsx:191
+#, c-format
+msgid "Product identification to use in URLs (for internal use only)."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:197
+#, c-format
+msgid "Illustration of the product for customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:203
+#, c-format
+msgid "Product description for customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:207
+#, c-format
+msgid "Age restriction"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:208
+#, c-format
+msgid "Is this product restricted for customer below certain age?"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:209
+#, c-format
+msgid "Minimum age of the customer"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:213
+#, c-format
+msgid "Unit name"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:214
+#, c-format
+msgid ""
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:215
+#, c-format
+msgid "Example: kg, items or liters"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:219
+#, c-format
+msgid "Price per unit"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:220
+#, c-format
+msgid ""
+"Sale price for customers, including taxes, for above units of the product."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:224
+#, c-format
+msgid "Stock"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:226
+#, c-format
+msgid "Inventory for products with finite supply (for internal use only)."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:231
+#, c-format
+msgid "Taxes included in the product price, exposed to customers."
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:235
+#, c-format
+msgid "Categories"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:241
+#, c-format
+msgid "Search by category description or id"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:242
+#, c-format
+msgid "Categories where this product will be listed on."
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:52
+#, c-format
+msgid "Product created successfully"
+msgstr ""
+
+#: src/paths/instance/products/create/index.tsx:58
+#, c-format
+msgid "Could not create product"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:76
+#, c-format
+msgid "Inventory"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:81
+#, c-format
+msgid "Add product to inventory"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:163
+#, c-format
+msgid "Sales"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:169
+#, c-format
+msgid "Sold"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:235
+#, c-format
+msgid "Free"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:275
+#, c-format
+msgid "Go to product update page"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:282
+#, c-format
+msgid "Update"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:287
+#, c-format
+msgid "Remove this product from the database"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:323
+#, c-format
+msgid "Load more products after the last one"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:365
+#, c-format
+msgid "Update the product with new price"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:376
+#, c-format
+msgid "Update product with new price"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:387
+#, c-format
+msgid "Confirm update"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:435
+#, c-format
+msgid "Add more elements to the inventory"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:440
+#, c-format
+msgid "Report elements lost in the inventory"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:445
+#, c-format
+msgid "New price for the product"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:457
+#, c-format
+msgid "The are value with errors"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:458
+#, c-format
+msgid "Update product with new stock and price"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:499
+#, c-format
+msgid "There are no products yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:86
+#, c-format
+msgid "Jump to product with the given product ID"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:87
+#, c-format
+msgid "Product id"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:104
+#, c-format
+msgid "Product updated successfully"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:109
+#, c-format
+msgid "Could not update the product"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:144
+#, c-format
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:149
+#, c-format
+msgid "Could not delete the product"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:165
+#, c-format
+msgid ""
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:173
+#, c-format
+msgid "Deleting an product can't be undone."
+msgstr ""
+
+#: src/paths/instance/products/update/UpdatePage.tsx:56
+#, c-format
+msgid "Product id:"
+msgstr ""
+
+#: src/paths/instance/products/update/index.tsx:85
+#, c-format
+msgid "Product (ID: %1$s) has been updated"
+msgstr ""
+
+#: src/paths/instance/products/update/index.tsx:91
+#, c-format
+msgid "Could not update product"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:112
+#, c-format
+msgid "Must be greater that 0"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:119
+#, c-format
+msgid "Too short"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:192
+#, c-format
+msgid "Identifier"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:193
+#, c-format
+msgid "Name of the template in URLs."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:199
+#, c-format
+msgid "Describe what this template stands for"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:206
+#, c-format
+msgid "If specified, this template will create an order with the same summary"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:210
+#, c-format
+msgid "Summary is editable"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:211
+#, c-format
+msgid "Allow the user to change the summary."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:217
+#, c-format
+msgid "If specified, this template will create an order with the same price"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:221
+#, c-format
+msgid "Amount is editable"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:222
+#, c-format
+msgid "Allow the user to select the amount to pay."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:229
+#, c-format
+msgid "Currency is editable"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:230
+#, c-format
+msgid "Allow the user to change currency."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:232
+#, c-format
+msgid "Supported currencies"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:233
+#, c-format
+msgid "Supported currencies: %1$s"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:241
+#, c-format
+msgid "Minimum age"
+msgstr "Asgari yaş"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:243
+#, c-format
+msgid "Is this contract restricted to some age?"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:247
+#, c-format
+msgid "Payment timeout"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:249
+#, c-format
+msgid ""
+"How much time the customer has to complete the payment once the order was "
+"created."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:254
+#, c-format
+msgid "OTP device"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:255
+#, c-format
+msgid "Use to verify transaction while offline."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:257
+#, c-format
+msgid "No OTP device."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:259
+#, c-format
+msgid "Add one first"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:272
+#, c-format
+msgid "No device"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:276
+#, c-format
+msgid "Use to verify transaction in offline mode."
+msgstr ""
+
+#: src/paths/instance/templates/create/index.tsx:52
+#, c-format
+msgid "Template has been created"
+msgstr ""
+
+#: src/paths/instance/templates/create/index.tsx:58
+#, c-format
+msgid "Could not create template"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:61
+#, c-format
+msgid "Templates"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:66
+#, c-format
+msgid "Add new templates"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:127
+#, c-format
+msgid "Load more templates before the first one"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:165
+#, c-format
+msgid "Delete selected templates from the database"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:172
+#, c-format
+msgid "Use template to create new order"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:175
+#, c-format
+msgid "Use template"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:179
+#, c-format
+msgid "Create qr code for the template"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:194
+#, c-format
+msgid "Load more templates after the last one"
+msgstr ""
+
+#: src/paths/instance/templates/list/Table.tsx:214
+#, c-format
+msgid "There are no templates yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:91
+#, c-format
+msgid "Jump to template with the given template ID"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:92
+#, c-format
+msgid "Template identification"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:132
+#, c-format
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:137
+#, c-format
+msgid "Failed to delete template"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:153
+#, c-format
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:160
+#, c-format
+msgid "Deleting an template"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:162
+#, c-format
+msgid "can't be undone"
+msgstr ""
+
+#: src/paths/instance/templates/qr/QrPage.tsx:77
+#, c-format
+msgid "Print"
+msgstr ""
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
+#, c-format
+msgid "If specified, this template will create order with the same summary"
+msgstr ""
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
+#, c-format
+msgid "If specified, this template will create orders with the same price"
+msgstr ""
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
+#, c-format
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
+msgstr ""
+
+#: src/paths/instance/templates/update/index.tsx:90
+#, c-format
+msgid "Template (ID: %1$s) has been updated"
+msgstr ""
+
+#: src/paths/instance/templates/use/UsePage.tsx:58
+#, c-format
+msgid "An amount is required"
+msgstr ""
+
+#: src/paths/instance/templates/use/UsePage.tsx:60
+#, c-format
+msgid "An order summary is required"
+msgstr ""
+
+#: src/paths/instance/templates/use/UsePage.tsx:88
+#, c-format
+msgid "New order from template"
+msgstr ""
+
+#: src/paths/instance/templates/use/UsePage.tsx:110
+#, c-format
+msgid "Amount of the order"
+msgstr ""
+
+#: src/paths/instance/templates/use/UsePage.tsx:115
+#, c-format
+msgid "Order summary"
+msgstr ""
+
+#: src/paths/instance/templates/use/index.tsx:125
+#, c-format
+msgid "Could not create order from template"
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:57
+#, c-format
+msgid "You need your access token to perform the operation"
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:74
+#, c-format
+msgid "You are updating the access token from instance with id \"%1$s\""
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:105
+#, c-format
+msgid "This instance doesn't have authentication token."
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:106
+#, c-format
+msgid "You can leave it empty if there is another layer of security."
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:121
+#, c-format
+msgid "Current access token"
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:126
+#, c-format
+msgid "Clearing the access token will mean public access to the instance."
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:142
+#, c-format
+msgid "Clear token"
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:177
+#, c-format
+msgid "Confirm change"
+msgstr ""
+
+#: src/paths/instance/token/index.tsx:83
+#, c-format
+msgid "Failed to clear token"
+msgstr ""
+
+#: src/paths/instance/token/index.tsx:109
+#, c-format
+msgid "Failed to set new token"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
+#, c-format
+msgid "Slug"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
+#, c-format
+msgid "Token family slug to use in URLs (for internal use only)"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
+#, c-format
+msgid "Kind"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
+#, c-format
+msgid "Token family kind"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
+#, c-format
+msgid "User-readable token family name"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
+#, c-format
+msgid "Token family description for customers"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
+#, fuzzy, c-format
+msgid "Valid After"
+msgstr "Geçerlilik"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
+#, c-format
+msgid "Token family can issue tokens after this date"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
+#, c-format
+msgid "Valid Before"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
+#, c-format
+msgid "Token family can issue tokens until this date"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
+#, c-format
+msgid "Duration"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
+#, c-format
+msgid "Validity duration of a issued token"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
+#, c-format
+msgid "Token familty created successfully"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
+#, c-format
+msgid "Could not create token family"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
+#, c-format
+msgid "Token Families"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
+#, c-format
+msgid "Add token family"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
+#, c-format
+msgid "Go to token family update page"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
+#, c-format
+msgid "Remove this token family from the database"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
+#, c-format
+msgid ""
+"There are no token families yet, add the first one by pressing the + sign."
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
+#, c-format
+msgid "Token family updated successfully"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
+#, c-format
+msgid "Could not update the token family"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
+#, c-format
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
+#, c-format
+msgid "Failed to delete token family"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
+#, c-format
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
+#, c-format
+msgid "Deleting a token family %1$s ."
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
+#, c-format
+msgid "Token Family: %1$s"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
+#, c-format
+msgid "Could not update token family"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
+#, c-format
+msgid "Check the id, does not look valid"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
+#, c-format
+msgid "Must have 52 characters, current %1$s"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
+#, c-format
+msgid "URL doesn't have the right format"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
+#, c-format
+msgid "Credited bank account"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
+#, fuzzy, c-format
+msgid "Select an account"
+msgstr "Banka hesabı"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#, c-format
+msgid "Bank account of the merchant where the payment was received"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
+#, c-format
+msgid "Wire transfer ID"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
+#, c-format
+msgid ""
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
+"characters long"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
+#, c-format
+msgid "Exchange URL"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
+#, c-format
+msgid ""
+"Base URL of the exchange that made the transfer, should have been in the "
+"wire transfer subject"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
+#, c-format
+msgid "Amount credited"
+msgstr ""
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
+#, c-format
+msgid "Actual amount that was wired to the merchant's bank account"
+msgstr ""
+
+#: src/paths/instance/transfers/create/index.tsx:62
+#, c-format
+msgid "Wire transfer informed successfully"
+msgstr ""
+
+#: src/paths/instance/transfers/create/index.tsx:68
+#, c-format
+msgid "Could not inform transfer"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:62
+#, c-format
+msgid "Transfers"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:67
+#, c-format
+msgid "Add new transfer"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:120
+#, c-format
+msgid "Load more transfers before the first one"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:133
+#, c-format
+msgid "Credit"
+msgstr "Kredi"
+
+#: src/paths/instance/transfers/list/Table.tsx:136
+#, c-format
+msgid "Confirmed"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:139
+#, c-format
+msgid "Verified"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:142
+#, c-format
+msgid "Executed on"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:153
+#, c-format
+msgid "yes"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:153
+#, c-format
+msgid "no"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:158
+#, c-format
+msgid "never"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:163
+#, c-format
+msgid "unknown"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:169
+#, c-format
+msgid "Delete selected transfer from the database"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:184
+#, c-format
+msgid "Load more transfers after the last one"
+msgstr ""
+
+#: src/paths/instance/transfers/list/Table.tsx:204
+#, c-format
+msgid "There are no transfers yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/transfers/list/ListPage.tsx:83
+#, fuzzy, c-format
+msgid "All accounts"
+msgstr "Hesap"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:84
+#, c-format
+msgid "Filter by account address"
+msgstr ""
+
+#: src/paths/instance/transfers/list/ListPage.tsx:105
+#, c-format
+msgid "Only show wire transfers confirmed by the merchant"
+msgstr ""
+
+#: src/paths/instance/transfers/list/ListPage.tsx:115
+#, c-format
+msgid "Only show wire transfers claimed by the exchange"
+msgstr ""
+
+#: src/paths/instance/transfers/list/ListPage.tsx:118
+#, c-format
+msgid "Unverified"
+msgstr ""
+
+#: src/paths/instance/transfers/list/index.tsx:118
+#, c-format
+msgid "Wire transfer \"%1$s...\" has been deleted"
+msgstr ""
+
+#: src/paths/instance/transfers/list/index.tsx:123
+#, c-format
+msgid "Failed to delete transfer"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:86
+#, c-format
+msgid "Must be business or individual"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:104
+#, c-format
+msgid "Pay delay can't be greater than wire transfer delay"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:112
+#, c-format
+msgid "Max 7 lines"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:138
+#, c-format
+msgid "Doesn't match"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:215
+#, c-format
+msgid "Enable access control"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:216
+#, c-format
+msgid "Choose if the backend server should authenticate access."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:243
+#, c-format
+msgid "Access control is not yet decided. This instance can't be created."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:250
+#, c-format
+msgid "Authorization must be handled externally."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:256
+#, c-format
+msgid "Authorization is handled by the backend server."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:274
+#, c-format
+msgid "Need to complete marked fields and choose authorization method"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
+#, c-format
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#, c-format
+msgid "Business name"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
+#, c-format
+msgid "Legal name of the business represented by this instance."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
+#, c-format
+msgid "Email"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
+#, c-format
+msgid "Contact email"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
+#, c-format
+msgid "Website URL"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
+#, c-format
+msgid "URL."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
+#, c-format
+msgid "Logo"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
+#, c-format
+msgid "Logo image."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
+#, c-format
+msgid "Physical location of the merchant."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
+#, c-format
+msgid "Jurisdiction"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#, c-format
+msgid "Jurisdiction for legal disputes with the merchant."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#, c-format
+msgid "Pay transaction fee"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
+#, c-format
+msgid "Assume the cost of the transaction of let the user pay for it."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#, c-format
+msgid "Default payment delay"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
+#, c-format
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#, c-format
+msgid "Default wire transfer delay"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#, c-format
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
+msgstr ""
+
+#: src/paths/instance/update/UpdatePage.tsx:124
+#, c-format
+msgid "Instance id"
+msgstr ""
+
+#: src/paths/instance/update/index.tsx:108
+#, c-format
+msgid "Failed to update instance"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
+#, c-format
+msgid "Must be \"pay\" or \"refund\""
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
+#, c-format
+msgid "Must be one of '%1$s'"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#, c-format
+msgid "Webhook ID to use"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#, c-format
+msgid "Event"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
+#, c-format
+msgid "Pay"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#, c-format
+msgid "The event of the webhook: why the webhook is used"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#, c-format
+msgid "Method"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
+#, c-format
+msgid "GET"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
+#, c-format
+msgid "POST"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
+#, c-format
+msgid "PUT"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#, c-format
+msgid "PATCH"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
+#, c-format
+msgid "HEAD"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
+#, c-format
+msgid "Method used by the webhook"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
+#, c-format
+msgid "URL"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
+#, c-format
+msgid "URL of the webhook where the customer will be redirected"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
+#, c-format
+msgid ""
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
+#, c-format
+msgid "For example %1$s will be replaced with the the order's price"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
+#, c-format
+msgid "The short list of variables are:"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
+#, c-format
+msgid "order's description"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
+#, c-format
+msgid "order's price"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
+#, c-format
+msgid "order's unique identification"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
+#, c-format
+msgid "the amount that was being refunded"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
+#, c-format
+msgid "the reason entered by the merchant staff for granting the refund"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
+#, c-format
+msgid "time of the refund in nanoseconds since 1970"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
+#, c-format
+msgid "Http body"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
+#, c-format
+msgid "Body template by the webhook"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/index.tsx:52
+#, c-format
+msgid "Webhook create successfully"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/index.tsx:58
+#, c-format
+msgid "Could not create the webhook"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/index.tsx:66
+#, c-format
+msgid "Could not create webhook"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/Table.tsx:57
+#, c-format
+msgid "Webhooks"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/Table.tsx:62
+#, c-format
+msgid "Add new webhooks"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/Table.tsx:117
+#, c-format
+msgid "Load more webhooks before the first one"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/Table.tsx:130
+#, c-format
+msgid "Event type"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/Table.tsx:155
+#, c-format
+msgid "Delete selected webhook from the database"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/Table.tsx:170
+#, c-format
+msgid "Load more webhooks after the last one"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/Table.tsx:190
+#, c-format
+msgid "There are no webhooks yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/index.tsx:88
+#, c-format
+msgid "Webhook delete successfully"
+msgstr ""
+
+#: src/paths/instance/webhooks/list/index.tsx:93
+#, c-format
+msgid "Could not delete the webhook"
+msgstr ""
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
+#, c-format
+msgid "Header"
+msgstr ""
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
+#, c-format
+msgid "Header template of the webhook"
+msgstr ""
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
+#, c-format
+msgid "Body"
+msgstr ""
+
+#: src/paths/instance/webhooks/update/index.tsx:88
+#, c-format
+msgid "Webhook updated"
+msgstr ""
+
+#: src/paths/instance/webhooks/update/index.tsx:94
+#, c-format
+msgid "Could not update webhook"
+msgstr ""
+
+#: src/paths/settings/index.tsx:73
+#, c-format
+msgid "Language"
+msgstr ""
+
+#: src/paths/settings/index.tsx:89
+#, c-format
+msgid "Advance order creation"
+msgstr ""
+
+#: src/paths/settings/index.tsx:90
+#, c-format
+msgid "Shows more options in the order creation form"
+msgstr ""
+
+#: src/paths/settings/index.tsx:94
+#, c-format
+msgid "Advance instance settings"
+msgstr ""
+
+#: src/paths/settings/index.tsx:95
+#, c-format
+msgid "Shows more options in the instance settings form"
+msgstr ""
+
+#: src/paths/settings/index.tsx:100
+#, c-format
+msgid "Date format"
+msgstr ""
+
+#: src/paths/settings/index.tsx:118
+#, c-format
+msgid "How the date is going to be displayed"
+msgstr ""
+
+#: src/paths/settings/index.tsx:121
+#, c-format
+msgid "Developer mode"
+msgstr ""
+
+#: src/paths/settings/index.tsx:122
+#, c-format
+msgid ""
+"Shows more options and tools which are not intended for general audience."
+msgstr ""
+
+#: src/paths/instance/categories/list/Table.tsx:133
+#, fuzzy, c-format
+msgid "Total products"
+msgstr "Ürünler"
+
+#: src/paths/instance/categories/list/Table.tsx:164
+#, c-format
+msgid "Delete selected category from the database"
+msgstr ""
+
+#: src/paths/instance/categories/list/Table.tsx:199
+#, c-format
+msgid "There are no categories yet, add more pressing the + sign"
+msgstr ""
+
+#: src/paths/instance/categories/list/index.tsx:90
+#, c-format
+msgid "Category delete successfully"
+msgstr ""
+
+#: src/paths/instance/categories/list/index.tsx:95
+#, c-format
+msgid "Could not delete the category"
+msgstr ""
+
+#: src/paths/instance/categories/create/CreatePage.tsx:75
+#, c-format
+msgid "Category name"
+msgstr ""
+
+#: src/paths/instance/categories/create/index.tsx:53
+#, c-format
+msgid "Category added successfully"
+msgstr ""
+
+#: src/paths/instance/categories/create/index.tsx:59
+#, c-format
+msgid "Could not add category"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
+#, c-format
+msgid "Id:"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
+#, c-format
+msgid "Name of the category"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
+#, c-format
+msgid "Products"
+msgstr "Ürünler"
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
+#, c-format
+msgid "Search by product description or id"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
+#, c-format
+msgid "Products that this category will list."
+msgstr ""
+
+#: src/paths/instance/categories/update/index.tsx:93
+#, c-format
+msgid "Could not update category"
+msgstr ""
+
+#: src/paths/instance/categories/update/index.tsx:95
+#, c-format
+msgid "Category id is unknown"
+msgstr ""
+
+#: src/Routing.tsx:665
+#, c-format
+msgid "Without this the merchant backend will refuse to create new orders."
+msgstr ""
+
+#: src/Routing.tsx:675
+#, c-format
+msgid "Hide for today"
+msgstr ""
+
+#: src/Routing.tsx:711
+#, c-format
+msgid "KYC verification needed"
+msgstr ""
+
+#: src/Routing.tsx:715
+#, c-format
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:167
+#, c-format
+msgid "Configuration"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:206
+#, c-format
+msgid "Settings"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:216
+#, c-format
+msgid "Access token"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:224
+#, c-format
+msgid "Connection"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:233
+#, c-format
+msgid "Interface"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:274
+#, c-format
+msgid "List"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:293
+#, c-format
+msgid "Log out"
+msgstr ""
+
+#: src/paths/admin/create/index.tsx:54
+#, c-format
+msgid "Failed to create instance"
+msgstr ""
+
+#: src/Application.tsx:208
+#, c-format
+msgid "checking compatibility with server..."
+msgstr ""
+
+#: src/Application.tsx:217
+#, c-format
+msgid "Contacting the server failed"
+msgstr ""
+
+#: src/Application.tsx:229
+#, c-format
+msgid "The server version is not supported"
+msgstr ""
+
+#: src/Application.tsx:230
+#, c-format
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
+msgstr ""
+
+#: src/components/form/InputSecured.tsx:37
+#, c-format
+msgid "Deleting"
+msgstr ""
+
+#: src/components/form/InputSecured.tsx:41
+#, c-format
+msgid "Changing"
+msgstr ""
+
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr ""
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, c-format
+msgid "Business Name"
+msgstr ""
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
+#, c-format
+msgid "Order ID"
+msgstr ""
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
+#, c-format
+msgid "Payment URL"
+msgstr ""
+
+#, c-format
+#~ msgid "Wire fee amortization"
+#~ msgstr "Banka havalesi amortismanı"
+
+#, c-format
+#~ msgid "free"
+#~ msgstr "ücretsiz"
diff --git a/packages/merchant-backoffice-ui/src/i18n/uk.po b/packages/merchant-backoffice-ui/src/i18n/uk.po
new file mode 100644
index 000000000..d7dd504c1
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/i18n/uk.po
@@ -0,0 +1,4236 @@
+# This file is part of GNU Taler
+# (C) 2021-2023 Taler Systems S.A.
+# GNU Taler is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+# GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# You should have received a copy of the GNU General Public License along with
+# GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Taler Wallet\n"
+"Report-Msgid-Bugs-To: taler@gnu.org\n"
+"PO-Revision-Date: 2024-11-05 22:06+0000\n"
+"Last-Translator: Stefan Kügel <stefan.kuegel@taler.net>\n"
+"Language-Team: Ukrainian <https://weblate.taler.net/projects/gnu-taler/"
+"merchant-backoffice/uk/>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.5.5\n"
+
+#: src/components/ErrorLoadingMerchant.tsx:45
+#, c-format
+msgid "The request reached a timeout, check your connection."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:65
+#, c-format
+msgid "The request was cancelled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:107
+#, c-format
+msgid ""
+"A lot of request were made to the same server and this action was throttled."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:130
+#, c-format
+msgid "The response of the request is malformed."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:150
+#, c-format
+msgid "Could not complete the request due to a network problem."
+msgstr ""
+
+#: src/components/ErrorLoadingMerchant.tsx:171
+#, fuzzy, c-format
+msgid "Unexpected request error."
+msgstr "Несподівана помилка"
+
+#: src/components/ErrorLoadingMerchant.tsx:199
+#, fuzzy, c-format
+msgid "Unexpected error."
+msgstr "Несподівана помилка"
+
+#: src/components/modal/index.tsx:81
+#, c-format
+msgid "Cancel"
+msgstr "Скасувати"
+
+#: src/components/modal/index.tsx:89
+#, c-format
+msgid "%1$s"
+msgstr "%1$s"
+
+#: src/components/modal/index.tsx:94
+#, c-format
+msgid "Close"
+msgstr "Закрити"
+
+#: src/components/modal/index.tsx:134
+#, c-format
+msgid "Continue"
+msgstr "Продовжити"
+
+#: src/components/modal/index.tsx:194
+#, c-format
+msgid "Clear"
+msgstr "Очистити"
+
+#: src/components/modal/index.tsx:206
+#, c-format
+msgid "Confirm"
+msgstr "Підтвердити"
+
+#: src/components/modal/index.tsx:248
+#, fuzzy, c-format
+msgid "Required"
+msgstr "обовʼязково"
+
+#: src/components/modal/index.tsx:250
+#, c-format
+msgid "Letter must be a JSON string"
+msgstr ""
+
+#: src/components/modal/index.tsx:252
+#, c-format
+msgid "JSON string is invalid"
+msgstr ""
+
+#: src/components/modal/index.tsx:257
+#, c-format
+msgid "Import"
+msgstr ""
+
+#: src/components/modal/index.tsx:258
+#, c-format
+msgid "Importing an account from the bank"
+msgstr ""
+
+#: src/components/modal/index.tsx:265
+#, c-format
+msgid ""
+"You can export your account settings from the Libeufin Bank's account "
+"profile. Paste the content in the next field."
+msgstr ""
+
+#: src/components/modal/index.tsx:273
+#, fuzzy, c-format
+msgid "Account information"
+msgstr "Додаткова інформація"
+
+#: src/components/modal/index.tsx:338
+#, c-format
+msgid "Correct form"
+msgstr ""
+
+#: src/components/modal/index.tsx:339
+#, c-format
+msgid "Comparing account details"
+msgstr ""
+
+#: src/components/modal/index.tsx:345
+#, c-format
+msgid ""
+"Testing against the account info URL succeeded but the account information "
+"reported is different with the account details form."
+msgstr ""
+
+#: src/components/modal/index.tsx:355
+#, c-format
+msgid "Field"
+msgstr ""
+
+#: src/components/modal/index.tsx:358
+#, c-format
+msgid "In the form"
+msgstr ""
+
+#: src/components/modal/index.tsx:361
+#, c-format
+msgid "Reported"
+msgstr ""
+
+#: src/components/modal/index.tsx:368
+#, c-format
+msgid "Type"
+msgstr ""
+
+#: src/components/modal/index.tsx:376
+#, c-format
+msgid "IBAN"
+msgstr ""
+
+#: src/components/modal/index.tsx:385
+#, c-format
+msgid "Address"
+msgstr "Адреса"
+
+#: src/components/modal/index.tsx:395
+#, c-format
+msgid "Host"
+msgstr "Хост"
+
+#: src/components/modal/index.tsx:402
+#, fuzzy, c-format
+msgid "Account id"
+msgstr "Рахунок"
+
+#: src/components/modal/index.tsx:413
+#, fuzzy, c-format
+msgid "Owner's name"
+msgstr "Назва бізнесу"
+
+#: src/components/modal/index.tsx:441
+#, c-format
+msgid "Account"
+msgstr "Рахунок"
+
+#: src/components/modal/index.tsx:445
+#, c-format
+msgid "Bank host"
+msgstr "Хост банку"
+
+#: src/components/modal/index.tsx:446
+#, c-format
+msgid "Bank account"
+msgstr "Банківський рахунок"
+
+#: src/components/modal/index.tsx:451
+#, c-format
+msgid "BIC"
+msgstr ""
+
+#: src/components/modal/index.tsx:470
+#, c-format
+msgid "Ok"
+msgstr ""
+
+#: src/components/modal/index.tsx:471
+#, c-format
+msgid "Validate bank account: %1$s"
+msgstr "Перевірка дійсності банківського рахунку: %1$s"
+
+#: src/components/modal/index.tsx:477
+#, c-format
+msgid ""
+"You need to make a bank transfer with the specified subject to validate that "
+"you are the owner of the account."
+msgstr ""
+
+#: src/components/modal/index.tsx:487
+#, c-format
+msgid "Step 1:"
+msgstr ""
+
+#: src/components/modal/index.tsx:489
+#, c-format
+msgid ""
+"Copy this code and paste it into the subject/purpose field in your banking "
+"app or bank website"
+msgstr ""
+
+#: src/components/modal/index.tsx:495
+#, c-format
+msgid "Subject"
+msgstr "Призначення"
+
+#: src/components/modal/index.tsx:499
+#, c-format
+msgid "Step 2:"
+msgstr ""
+
+#: src/components/modal/index.tsx:501
+#, c-format
+msgid ""
+"Copy and paste this IBAN and the name into the receiver fields in your "
+"banking app or website"
+msgstr ""
+
+#: src/components/modal/index.tsx:509
+#, fuzzy, c-format
+msgid "Receiver name"
+msgstr "Дата доставки"
+
+#: src/components/modal/index.tsx:514
+#, c-format
+msgid "Step 3:"
+msgstr ""
+
+#: src/components/modal/index.tsx:516
+#, c-format
+msgid ""
+"Finish the wire transfer setting smallest amount in your banking app or "
+"website."
+msgstr ""
+
+#: src/components/modal/index.tsx:536
+#, c-format
+msgid ""
+"Make sure ALL data is correct, including the subject and you are using your "
+"selected bank account. You can use the copy buttons (%1$s) to prevent typing "
+"errors or the \"payto://\" URI below to copy just one value."
+msgstr ""
+
+#: src/components/modal/index.tsx:549
+#, c-format
+msgid ""
+"Alternative if your bank already supports PayTo URI, you can use this %1$s "
+"link instead"
+msgstr ""
+
+#: src/components/modal/index.tsx:694
+#, c-format
+msgid ""
+"If you delete the instance named %1$s (ID: %2$s), the merchant will no "
+"longer be able to process orders or refunds"
+msgstr ""
+
+#: src/components/modal/index.tsx:701
+#, c-format
+msgid ""
+"This action deletes the instance private key, but preserves all transaction "
+"data. You can still access that data after deleting the instance."
+msgstr ""
+
+#: src/components/modal/index.tsx:708
+#, c-format
+msgid "Deleting an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:736
+#, c-format
+msgid ""
+"If you purge the instance named %1$s (ID: %2$s), you will also delete all "
+"it&apos;s transaction data."
+msgstr ""
+
+#: src/components/modal/index.tsx:743
+#, c-format
+msgid ""
+"The instance will disappear from your list, and you will no longer be able "
+"to access it&apos;s data."
+msgstr ""
+
+#: src/components/modal/index.tsx:749
+#, c-format
+msgid "Purging an instance %1$s ."
+msgstr ""
+
+#: src/components/modal/index.tsx:786
+#, fuzzy, c-format
+msgid "Is not the same as the current access token"
+msgstr "не співпадає з поточним токеном доступу"
+
+#: src/components/modal/index.tsx:791
+#, fuzzy, c-format
+msgid "Can't be the same as the old token"
+msgstr "не може бути таким самим, як старий токен"
+
+#: src/components/modal/index.tsx:795
+#, fuzzy, c-format
+msgid "Is not the same"
+msgstr "не співпадає"
+
+#: src/components/modal/index.tsx:803
+#, fuzzy, c-format
+msgid "You are updating the access token for the instance with id %1$s"
+msgstr "Ви оновлюєте токен доступу з інстанції з ідентифікатором %1$s"
+
+#: src/components/modal/index.tsx:819
+#, c-format
+msgid "Old access token"
+msgstr "Старий токен доступу"
+
+#: src/components/modal/index.tsx:820
+#, fuzzy, c-format
+msgid "Access token currently in use"
+msgstr "токен доступу, який зараз використовується"
+
+#: src/components/modal/index.tsx:826
+#, c-format
+msgid "New access token"
+msgstr "Новий токен доступу"
+
+#: src/components/modal/index.tsx:827
+#, fuzzy, c-format
+msgid "Next access token to be used"
+msgstr "наступний токен доступу, який буде використано"
+
+#: src/components/modal/index.tsx:832
+#, c-format
+msgid "Repeat access token"
+msgstr "Повторіть токен доступу"
+
+#: src/components/modal/index.tsx:833
+#, fuzzy, c-format
+msgid "Confirm the same access token"
+msgstr "підтвердити той самий токен доступу"
+
+#: src/components/modal/index.tsx:838
+#, c-format
+msgid "Clearing the access token will mean public access to the instance"
+msgstr "Видалення токена доступу означатиме публічний доступ до системи"
+
+#: src/components/modal/index.tsx:865
+#, fuzzy, c-format
+msgid "Can't be the same as the old access token"
+msgstr "не може бути таким самим, як старий токен доступу"
+
+#: src/components/modal/index.tsx:880
+#, c-format
+msgid "You are setting the access token for the new instance"
+msgstr "Ви встановлюєте токен доступу для нової інстанції"
+
+#: src/components/modal/index.tsx:906
+#, c-format
+msgid ""
+"With external authorization method no check will be done by the merchant "
+"backend"
+msgstr ""
+"З зовнішнім методом авторизації перевірка не буде виконуватися бекендом "
+"продавця"
+
+#: src/components/modal/index.tsx:922
+#, c-format
+msgid "Set external authorization"
+msgstr "Встановити зовнішню авторизацію"
+
+#: src/components/modal/index.tsx:934
+#, c-format
+msgid "Set access token"
+msgstr "Встановити токен доступу"
+
+#: src/components/modal/index.tsx:956
+#, c-format
+msgid "Operation in progress..."
+msgstr "Операція виконується..."
+
+#: src/components/modal/index.tsx:965
+#, c-format
+msgid "The operation will be automatically canceled after %1$s seconds"
+msgstr "Операція буде автоматично скасована через %1$s секунд"
+
+#: src/paths/login/index.tsx:63
+#, c-format
+msgid "Your password is incorrect"
+msgstr ""
+
+#: src/paths/login/index.tsx:70
+#, fuzzy, c-format
+msgid "Your instance cannot be found"
+msgstr "замовлення не знайдено"
+
+#: src/paths/login/index.tsx:89
+#, c-format
+msgid "Login required"
+msgstr "Потрібен вхід"
+
+#: src/paths/login/index.tsx:95
+#, c-format
+msgid "Please enter your access token for %1$s."
+msgstr "Будь ласка, введіть ваш токен доступу для %1$s."
+
+#: src/paths/login/index.tsx:102
+#, c-format
+msgid "Access Token"
+msgstr "Токен доступу"
+
+#: src/paths/admin/list/TableActive.tsx:79
+#, c-format
+msgid "Instances"
+msgstr "Інстанції"
+
+#: src/paths/admin/list/TableActive.tsx:92
+#, c-format
+msgid "Delete"
+msgstr "Видалити"
+
+#: src/paths/admin/list/TableActive.tsx:98
+#, fuzzy, c-format
+msgid "Add new instance"
+msgstr "додати нову інстанцію"
+
+#: src/paths/admin/list/TableActive.tsx:175
+#, c-format
+msgid "ID"
+msgstr "Ідентифікатор"
+
+#: src/paths/admin/list/TableActive.tsx:178
+#, c-format
+msgid "Name"
+msgstr "Назва"
+
+#: src/paths/admin/list/TableActive.tsx:220
+#, c-format
+msgid "Edit"
+msgstr "Редагувати"
+
+#: src/paths/admin/list/TableActive.tsx:237
+#, c-format
+msgid "Purge"
+msgstr "Очистити"
+
+#: src/paths/admin/list/TableActive.tsx:261
+#, fuzzy, c-format
+msgid "There are no instances yet, add more pressing the + sign"
+msgstr "Ще немає інстанцій, додайте більше, натиснувши знак +"
+
+#: src/paths/admin/list/View.tsx:66
+#, c-format
+msgid "Only show active instances"
+msgstr "Показувати тільки активні інстанції"
+
+#: src/paths/admin/list/View.tsx:69
+#, c-format
+msgid "Active"
+msgstr "Активні"
+
+#: src/paths/admin/list/View.tsx:76
+#, c-format
+msgid "Only show deleted instances"
+msgstr "Показувати тільки видалені інстанції"
+
+#: src/paths/admin/list/View.tsx:79
+#, c-format
+msgid "Deleted"
+msgstr "Видалено"
+
+#: src/paths/admin/list/View.tsx:86
+#, c-format
+msgid "Show all instances"
+msgstr "Показати всі інстанції"
+
+#: src/paths/admin/list/View.tsx:89
+#, c-format
+msgid "All"
+msgstr "Всі"
+
+#: src/paths/admin/list/index.tsx:100
+#, c-format
+msgid "Instance \"%1$s\" (ID: %2$s) has been deleted"
+msgstr "Інстанція \"%1$s\" (ID: %2$s) була видалена"
+
+#: src/paths/admin/list/index.tsx:105
+#, c-format
+msgid "Failed to delete instance"
+msgstr "Не вдалося видалити інстанцію"
+
+#: src/paths/admin/list/index.tsx:140
+#, fuzzy, c-format
+msgid "Instance '%1$s' (ID: %2$s) has been purged"
+msgstr "Інстанція '%1$s' (ID: %2$s) була деактивована"
+
+#: src/paths/admin/list/index.tsx:145
+#, c-format
+msgid "Failed to purge instance"
+msgstr "Не вдалося очистити інстанцію"
+
+#: src/components/exception/AsyncButton.tsx:43
+#, c-format
+msgid "Loading..."
+msgstr "Завантаження..."
+
+#: src/components/form/InputPaytoForm.tsx:86
+#, c-format
+msgid "This is not a valid bitcoin address."
+msgstr "Це недійсна адреса біткойн."
+
+#: src/components/form/InputPaytoForm.tsx:99
+#, c-format
+msgid "This is not a valid Ethereum address."
+msgstr "Це недійсна адреса Ethereum."
+
+#: src/components/form/InputPaytoForm.tsx:128
+#, fuzzy, c-format
+msgid "This is not a valid host."
+msgstr "Це недійсна адреса біткойн."
+
+#: src/components/form/InputPaytoForm.tsx:151
+#, c-format
+msgid "IBAN numbers usually have more that 4 digits"
+msgstr "Номера IBAN зазвичай мають більше 4-ьох цифр"
+
+#: src/components/form/InputPaytoForm.tsx:153
+#, c-format
+msgid "IBAN numbers usually have less that 34 digits"
+msgstr "Номера IBAN зазвичай мають менше 34-ьох цифр"
+
+#: src/components/form/InputPaytoForm.tsx:161
+#, c-format
+msgid "IBAN country code not found"
+msgstr "Код країни IBAN не знайдено"
+
+#: src/components/form/InputPaytoForm.tsx:186
+#, fuzzy, c-format
+msgid "IBAN number is invalid, checksum is wrong"
+msgstr "Номер IBAN не коректний, контрольна сума не сходиться"
+
+#: src/components/form/InputPaytoForm.tsx:201
+#, c-format
+msgid "Choose one..."
+msgstr "Виберіть одну..."
+
+#: src/components/form/InputPaytoForm.tsx:304
+#, c-format
+msgid "Method to use for wire transfer"
+msgstr "Метод для використання при банківському переказі"
+
+#: src/components/form/InputPaytoForm.tsx:314
+#, c-format
+msgid "Routing"
+msgstr "Маршрутизація"
+
+#: src/components/form/InputPaytoForm.tsx:316
+#, c-format
+msgid "Routing number."
+msgstr "Номер маршрутизації."
+
+#: src/components/form/InputPaytoForm.tsx:322
+#, c-format
+msgid "Account number."
+msgstr "Номер рахунку."
+
+#: src/components/form/InputPaytoForm.tsx:330
+#, c-format
+msgid "Code"
+msgstr "Код"
+
+#: src/components/form/InputPaytoForm.tsx:332
+#, c-format
+msgid "Business Identifier Code."
+msgstr "Код ідентифікації бізнесу."
+
+#: src/components/form/InputPaytoForm.tsx:341
+#, fuzzy, c-format
+msgid "International Bank Account Number."
+msgstr "Номер банківського рахунку."
+
+#: src/components/form/InputPaytoForm.tsx:354
+#, c-format
+msgid "Unified Payment Interface."
+msgstr "Уніфікований інтерфейс платежів."
+
+#: src/components/form/InputPaytoForm.tsx:364
+#, c-format
+msgid "Bitcoin protocol."
+msgstr "Протокол біткойн."
+
+#: src/components/form/InputPaytoForm.tsx:374
+#, c-format
+msgid "Ethereum protocol."
+msgstr "Протокол Ethereum."
+
+#: src/components/form/InputPaytoForm.tsx:384
+#, c-format
+msgid "Interledger protocol."
+msgstr "Протокол Interledger."
+
+#: src/components/form/InputPaytoForm.tsx:406
+#, c-format
+msgid "Bank host."
+msgstr "Хост банку."
+
+#: src/components/form/InputPaytoForm.tsx:410
+#, c-format
+msgid "Without scheme and may include subpath:"
+msgstr ""
+
+#: src/components/form/InputPaytoForm.tsx:423
+#, c-format
+msgid "Bank account."
+msgstr "Банківський рахунок."
+
+#: src/components/form/InputPaytoForm.tsx:438
+#, c-format
+msgid "Legal name of the person holding the account."
+msgstr "Офіційне ім'я власника рахунку."
+
+#: src/components/form/InputPaytoForm.tsx:439
+#, c-format
+msgid "It should match the bank account name."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:104
+#, fuzzy, c-format
+msgid "Invalid url"
+msgstr "недійсний формат"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:106
+#, c-format
+msgid "URL must end with a '/'"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:108
+#, c-format
+msgid "URL must not contain params"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:110
+#, c-format
+msgid "URL must not hash param"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:198
+#, c-format
+msgid "The request to check the revenue API failed."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:207
+#, c-format
+msgid "Server replied with \"bad request\"."
+msgstr "Відповідь сервера з кодом помилки."
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:215
+#, c-format
+msgid "Unauthorized, check credentials."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:223
+#, c-format
+msgid "The endpoint does not seem to be a Taler Revenue API."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:233
+#, c-format
+msgid ""
+"Request succeeded but server didn't reply the 'credit_account' so we can't "
+"check that the account is the same."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:270
+#, c-format
+msgid "Account:"
+msgstr "Рахунок:"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:294
+#, c-format
+msgid ""
+"If the bank supports Taler Revenue API then you can add the endpoint URL "
+"below to keep the revenue information in sync."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:303
+#, c-format
+msgid "Endpoint URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:306
+#, c-format
+msgid ""
+"From where the merchant can download information about incoming wire "
+"transfers to this account"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:310
+#, fuzzy, c-format
+msgid "Auth type"
+msgstr "Тип події"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:311
+#, c-format
+msgid "Choose the authentication type for the account info URL"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:314
+#, c-format
+msgid "Without authentication"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:315
+#, c-format
+msgid "With password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:316
+#, fuzzy, c-format
+msgid "With token"
+msgstr "Створити токен"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:317
+#, fuzzy, c-format
+msgid "Do not change"
+msgstr "URL обмінника"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:324
+#, c-format
+msgid "Username"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:325
+#, c-format
+msgid "Username to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:330
+#, c-format
+msgid "Password"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:331
+#, c-format
+msgid "Password to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:339
+#, c-format
+msgid "Token"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:341
+#, c-format
+msgid "Access token to access the account information."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:346
+#, c-format
+msgid "Match"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:347
+#, c-format
+msgid "Check where the information match against the server info."
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:355
+#, fuzzy, c-format
+msgid "Not verified"
+msgstr "Неперевірений"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:357
+#, c-format
+msgid "Last test was ok"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:358
+#, c-format
+msgid "Last test failed"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:363
+#, c-format
+msgid "Compare info from server with account form"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:369
+#, c-format
+msgid "Test"
+msgstr ""
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:385
+#, c-format
+msgid "Need to complete marked fields"
+msgstr "Необхідно заповнити позначені поля"
+
+#: src/paths/instance/accounts/update/UpdatePage.tsx:386
+#, fuzzy, c-format
+msgid "Confirm operation"
+msgstr "Підтверджено"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:223
+#, fuzzy, c-format
+msgid "Account details"
+msgstr "Адреса рахунку"
+
+#: src/paths/instance/accounts/create/CreatePage.tsx:302
+#, c-format
+msgid "Import from bank"
+msgstr ""
+
+#: src/paths/instance/accounts/create/index.tsx:69
+#, fuzzy, c-format
+msgid "Could not create account"
+msgstr "не вдалося створити продукт"
+
+#: src/paths/notfound/index.tsx:53
+#, c-format
+msgid "No 'default' instance configured yet."
+msgstr "Інстанція 'default' ще не налаштована."
+
+#: src/paths/notfound/index.tsx:54
+#, c-format
+msgid "Create a 'default' instance to begin using the merchant backoffice."
+msgstr ""
+"Створіть інстанцію 'default', щоб почати використовувати бекофіс продавця."
+
+#: src/paths/instance/accounts/list/Table.tsx:62
+#, fuzzy, c-format
+msgid "Bank accounts"
+msgstr "Банківський рахунок"
+
+#: src/paths/instance/accounts/list/Table.tsx:67
+#, fuzzy, c-format
+msgid "Add new account"
+msgstr "Зарахований банківський рахунок"
+
+#: src/paths/instance/accounts/list/Table.tsx:136
+#, fuzzy, c-format
+msgid "Wire method: Bitcoin"
+msgstr "Метод переказу"
+
+#: src/paths/instance/accounts/list/Table.tsx:145
+#, c-format
+msgid "SegWit 1"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:148
+#, c-format
+msgid "SegWit 2"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:180
+#, fuzzy, c-format
+msgid "Delete selected accounts from the database"
+msgstr "видалити вибраний переказ з бази даних"
+
+#: src/paths/instance/accounts/list/Table.tsx:198
+#, fuzzy, c-format
+msgid "Wire method: x-taler-bank"
+msgstr "Метод переказу"
+
+#: src/paths/instance/accounts/list/Table.tsx:207
+#, fuzzy, c-format
+msgid "Account name"
+msgstr "Номер рахунку."
+
+#: src/paths/instance/accounts/list/Table.tsx:251
+#, fuzzy, c-format
+msgid "Wire method: IBAN"
+msgstr "Метод переказу"
+
+#: src/paths/instance/accounts/list/Table.tsx:304
+#, fuzzy, c-format
+msgid "Other accounts"
+msgstr "Цільовий рахунок"
+
+#: src/paths/instance/accounts/list/Table.tsx:313
+#, c-format
+msgid "Path"
+msgstr ""
+
+#: src/paths/instance/accounts/list/Table.tsx:367
+#, fuzzy, c-format
+msgid "There are no accounts yet, add more pressing the + sign"
+msgstr "Продуктів ще немає, додайте більше, натиснувши знак +"
+
+#: src/paths/instance/accounts/list/index.tsx:77
+#, fuzzy, c-format
+msgid "You need to associate a bank account to receive revenue."
+msgstr "URI, що вказує на банківський рахунок для зарахування доходу."
+
+#: src/paths/instance/accounts/list/index.tsx:78
+#, c-format
+msgid "Without this the you won't be able to create new orders."
+msgstr "використовувати шаблон для створення нового замовлення."
+
+#: src/paths/instance/accounts/list/index.tsx:98
+#, c-format
+msgid "The bank account has been successfully deleted."
+msgstr "Банківський рахунок успішно видалено."
+
+#: src/paths/instance/accounts/list/index.tsx:103
+#, c-format
+msgid "Could not delete the bank account"
+msgstr "Не вдалося видалити банківський рахунок"
+
+#: src/paths/instance/accounts/update/index.tsx:90
+#, c-format
+msgid "Could not update account"
+msgstr "Не вдалося оновити обліковий запис"
+
+#: src/paths/instance/accounts/update/index.tsx:135
+#, c-format
+msgid "Could not delete account"
+msgstr "Не вдалося видалити обліковий запис"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:53
+#, c-format
+msgid "Pending KYC verification"
+msgstr "Очікування перевірки KYC"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:99
+#, c-format
+msgid "Exchange"
+msgstr "Exchange"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:105
+#, c-format, fuzzy
+msgid "Reason"
+msgstr "Причина"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:120
+#, c-format
+msgid "Pending KYC process, click here to complete"
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:140
+#, c-format
+msgid "The exchange require a account verification."
+msgstr ""
+
+#: src/paths/instance/kyc/list/ListPage.tsx:169
+#, c-format
+msgid "Http Status"
+msgstr "HTTP статус"
+
+#: src/paths/instance/kyc/list/ListPage.tsx:199
+#, c-format
+msgid "No pending kyc verification!"
+msgstr "Немає очікуваних перевірок KYC!"
+
+#: src/components/form/InputDate.tsx:127
+#, fuzzy, c-format
+msgid "Change value to unknown date"
+msgstr "змінити значення на невідому дату"
+
+#: src/components/form/InputDate.tsx:128
+#, fuzzy, c-format
+msgid "Change value to empty"
+msgstr "змінити значення на порожнє"
+
+#: src/components/form/InputDate.tsx:140
+#, fuzzy, c-format
+msgid "Change value to never"
+msgstr "змінити значення на ніколи"
+
+#: src/components/form/InputDate.tsx:145
+#, fuzzy, c-format
+msgid "Never"
+msgstr "ніколи"
+
+#: src/components/picker/DurationPicker.tsx:55
+#, c-format
+msgid "days"
+msgstr "дні"
+
+#: src/components/picker/DurationPicker.tsx:65
+#, c-format
+msgid "hours"
+msgstr "години"
+
+#: src/components/picker/DurationPicker.tsx:76
+#, c-format
+msgid "minutes"
+msgstr "хвилини"
+
+#: src/components/picker/DurationPicker.tsx:87
+#, c-format
+msgid "seconds"
+msgstr "секунди"
+
+#: src/components/form/InputDuration.tsx:62
+#, fuzzy, c-format
+msgid "Forever"
+msgstr "назавжди"
+
+#: src/components/form/InputDuration.tsx:78
+#, c-format
+msgid "%1$sM"
+msgstr "%1$sМ"
+
+#: src/components/form/InputDuration.tsx:80
+#, c-format
+msgid "%1$sY"
+msgstr "%1$sР"
+
+#: src/components/form/InputDuration.tsx:82
+#, c-format
+msgid "%1$sd"
+msgstr "%1$sдн."
+
+#: src/components/form/InputDuration.tsx:84
+#, c-format
+msgid "%1$sh"
+msgstr "%1$sг"
+
+#: src/components/form/InputDuration.tsx:86
+#, c-format
+msgid "%1$smin"
+msgstr "%1$sхв"
+
+#: src/components/form/InputDuration.tsx:88
+#, c-format
+msgid "%1$ssec"
+msgstr "%1$sсек"
+
+#: src/components/form/InputLocation.tsx:29
+#, c-format
+msgid "Country"
+msgstr "Країна"
+
+#: src/components/form/InputLocation.tsx:39
+#, c-format
+msgid "Building number"
+msgstr "Номер будинку"
+
+#: src/components/form/InputLocation.tsx:41
+#, c-format
+msgid "Building name"
+msgstr "Назва будинку"
+
+#: src/components/form/InputLocation.tsx:42
+#, c-format
+msgid "Street"
+msgstr "Вулиця"
+
+#: src/components/form/InputLocation.tsx:43
+#, c-format
+msgid "Post code"
+msgstr "Поштовий індекс"
+
+#: src/components/form/InputLocation.tsx:44
+#, c-format
+msgid "Town location"
+msgstr "Область міста"
+
+#: src/components/form/InputLocation.tsx:45
+#, c-format
+msgid "Town"
+msgstr "Місто"
+
+#: src/components/form/InputLocation.tsx:46
+#, c-format
+msgid "District"
+msgstr "Район"
+
+#: src/components/form/InputLocation.tsx:49
+#, c-format
+msgid "Country subdivision"
+msgstr "Регіон країни"
+
+#: src/components/form/InputSearchOnList.tsx:80
+#, c-format
+msgid "Description"
+msgstr "Опис"
+
+#: src/components/form/InputSearchOnList.tsx:106
+#, fuzzy, c-format
+msgid "Enter description or id"
+msgstr "Введіть ідентифікатор замовлення"
+
+#: src/components/form/InputSearchOnList.tsx:164
+#, fuzzy, c-format
+msgid "no match found with that description or id"
+msgstr "продукти з таким описом не знайдено"
+
+#: src/components/product/InventoryProductForm.tsx:57
+#, c-format
+msgid "You must enter a valid product identifier."
+msgstr "Ви повинні ввести дійсний ідентифікатор продукту."
+
+#: src/components/product/InventoryProductForm.tsx:65
+#, c-format
+msgid "Quantity must be greater than 0!"
+msgstr "Кількість має бути більше 0!"
+
+#: src/components/product/InventoryProductForm.tsx:77
+#, c-format
+msgid ""
+"This quantity exceeds remaining stock. Currently, only %1$s units remain "
+"unreserved in stock."
+msgstr ""
+"Ця кількість перевищує залишок на складі. Наразі на складі залишилося лише "
+"%1$s одиниць, які не зарезервовані."
+
+#: src/components/product/InventoryProductForm.tsx:100
+#, fuzzy, c-format
+msgid "Search product"
+msgstr "нова ціна для продукту"
+
+#: src/components/product/InventoryProductForm.tsx:112
+#, c-format
+msgid "Quantity"
+msgstr "Кількість"
+
+#: src/components/product/InventoryProductForm.tsx:113
+#, fuzzy, c-format
+msgid "How many products will be added"
+msgstr "скільки продуктів буде додано"
+
+#: src/components/product/InventoryProductForm.tsx:120
+#, c-format
+msgid "Add from inventory"
+msgstr "Додати зі складу"
+
+#: src/components/form/InputImage.tsx:107
+#, fuzzy, c-format
+msgid "Image must be smaller than 1 MB"
+msgstr "Зображення повинно бути меншим за 1 МБ"
+
+#: src/components/form/InputImage.tsx:112
+#, c-format
+msgid "Add"
+msgstr "Додати"
+
+#: src/components/form/InputImage.tsx:122
+#, c-format
+msgid "Remove"
+msgstr "Видалити"
+
+#: src/components/form/InputTaxes.tsx:47
+#, fuzzy, c-format
+msgid "Invalid"
+msgstr "недійсний"
+
+#: src/components/form/InputTaxes.tsx:66
+#, c-format
+msgid "This product has %1$s applicable taxes configured."
+msgstr ""
+
+#: src/components/form/InputTaxes.tsx:103
+#, c-format
+msgid "No taxes configured for this product."
+msgstr "Податки для цього продукту не налаштовані."
+
+#: src/components/form/InputTaxes.tsx:109
+#, c-format
+msgid "Amount"
+msgstr "Сума"
+
+#: src/components/form/InputTaxes.tsx:110
+#, c-format
+msgid ""
+"Taxes can be in currencies that differ from the main currency used by the "
+"merchant."
+msgstr ""
+"Податки можуть бути в валютах, що відрізняються від основної валюти, яку "
+"використовує продавець."
+
+#: src/components/form/InputTaxes.tsx:112
+#, c-format
+msgid ""
+"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;."
+msgstr ""
+"Введіть валюту та значення, розділені двокрапкою, наприклад, &quot;"
+"USD:2.3&quot;."
+
+#: src/components/form/InputTaxes.tsx:121
+#, c-format
+msgid "Legal name of the tax, e.g. VAT or import duties."
+msgstr "Офіційна назва податку, наприклад, ПДВ або імпортні мита."
+
+#: src/components/form/InputTaxes.tsx:127
+#, fuzzy, c-format
+msgid "Add tax to the tax list"
+msgstr "додати податок до списку податків"
+
+#: src/components/product/NonInventoryProductForm.tsx:71
+#, fuzzy, c-format
+msgid "Describe and add a product that is not in the inventory list"
+msgstr "опишіть і додайте продукт, якого немає в списку інвентарю"
+
+#: src/components/product/NonInventoryProductForm.tsx:74
+#, c-format
+msgid "Add custom product"
+msgstr "Додати новий продукт"
+
+#: src/components/product/NonInventoryProductForm.tsx:85
+#, c-format
+msgid "Complete information of the product"
+msgstr "Повна інформація про продукт"
+
+#: src/components/product/NonInventoryProductForm.tsx:152
+#, fuzzy, c-format
+msgid "Must be a number"
+msgstr "не є числом"
+
+#: src/components/product/NonInventoryProductForm.tsx:154
+#, fuzzy, c-format
+msgid "Must be grater than 0"
+msgstr "має бути більше 0"
+
+#: src/components/product/NonInventoryProductForm.tsx:185
+#, c-format
+msgid "Image"
+msgstr "Зображення"
+
+#: src/components/product/NonInventoryProductForm.tsx:186
+#, c-format
+msgid "Photo of the product."
+msgstr "фото продукту."
+
+#: src/components/product/NonInventoryProductForm.tsx:192
+#, c-format
+msgid "Full product description."
+msgstr "повний опис продукту."
+
+#: src/components/product/NonInventoryProductForm.tsx:196
+#, c-format
+msgid "Unit"
+msgstr "Одиниця"
+
+#: src/components/product/NonInventoryProductForm.tsx:197
+#, c-format
+msgid "Name of the product unit."
+msgstr "назва одиниці продукту."
+
+#: src/components/product/NonInventoryProductForm.tsx:201
+#, c-format
+msgid "Price"
+msgstr "Ціна"
+
+#: src/components/product/NonInventoryProductForm.tsx:202
+#, c-format
+msgid "Amount in the current currency."
+msgstr "сума в поточній валюті."
+
+#: src/components/product/NonInventoryProductForm.tsx:208
+#, c-format
+msgid "How many products will be added."
+msgstr "скільки продуктів буде додано."
+
+#: src/components/product/NonInventoryProductForm.tsx:211
+#, c-format
+msgid "Taxes"
+msgstr "Податки"
+
+#: src/components/product/ProductList.tsx:46
+#, fuzzy, c-format
+msgid "Unit price"
+msgstr "ціна за одиницю"
+
+#: src/components/product/ProductList.tsx:49
+#, c-format
+msgid "Total price"
+msgstr "Загальна ціна"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:162
+#, fuzzy, c-format
+msgid "Must be greater than 0"
+msgstr "має бути більше 0"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:173
+#, fuzzy, c-format
+msgid "Refund deadline can't be before pay deadline"
+msgstr "термін повернення не може бути раніше терміну оплати"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:179
+#, fuzzy, c-format
+msgid "Wire transfer deadline can't be before refund deadline"
+msgstr "термін банківського переказу не може бути раніше терміну повернення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:188
+#, fuzzy, c-format
+msgid "Wire transfer deadline can't be before pay deadline"
+msgstr "термін банківського переказу не може бути раніше терміну оплати"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:196
+#, fuzzy, c-format
+msgid "Must have a refund deadline"
+msgstr "повинен бути встановлений термін повернення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:201
+#, fuzzy, c-format
+msgid "Auto refund can't be after refund deadline"
+msgstr "автоматичне повернення не може бути після терміну повернення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:208
+#, fuzzy, c-format
+msgid "Must be in the future"
+msgstr "повинно бути в майбутньому"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:376
+#, c-format
+msgid "Simple"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:388
+#, c-format
+msgid "Advanced"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:400
+#, c-format
+msgid "Manage products in order"
+msgstr "Керування продуктами в замовленні"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:404
+#, c-format
+msgid "%1$s products with a total price of %2$s."
+msgstr "%1$s товарів із загальною ціною %2$s."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:411
+#, c-format
+msgid "Manage list of products in the order."
+msgstr "Керування списком продуктів у замовленні."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:435
+#, c-format
+msgid "Remove this product from the order."
+msgstr "Видалити цей продукт із замовлення."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:461
+#, fuzzy, c-format
+msgid "Total product price added up"
+msgstr "загальна сума продукту"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:474
+#, c-format
+msgid "Amount to be paid by the customer"
+msgstr "Сума, яку має сплатити клієнт"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:480
+#, c-format
+msgid "Order price"
+msgstr "Ціна замовлення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:481
+#, fuzzy, c-format
+msgid "Final order price"
+msgstr "кінцева ціна замовлення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:488
+#, c-format
+msgid "Summary"
+msgstr "Підсумок"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:489
+#, c-format
+msgid "Title of the order to be shown to the customer"
+msgstr "Назва замовлення, яку буде показано клієнту"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:495
+#, fuzzy, c-format
+msgid "Shipping and fulfillment"
+msgstr "Доставка та виконання"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:500
+#, c-format
+msgid "Delivery date"
+msgstr "Дата доставки"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:501
+#, c-format
+msgid "Deadline for physical delivery assured by the merchant."
+msgstr "Термін фізичної доставки, гарантований продавцем."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:506
+#, c-format
+msgid "Location"
+msgstr "Місцезнаходження"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:507
+#, fuzzy, c-format
+msgid "Address where the products will be delivered"
+msgstr "адреса, за якою будуть доставлені продукти"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:514
+#, c-format
+msgid "Fulfillment URL"
+msgstr "URL виконання"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:515
+#, c-format
+msgid "URL to which the user will be redirected after successful payment."
+msgstr "URL, на який користувача буде перенаправлено після успішної оплати."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:523
+#, c-format
+msgid "Taler payment options"
+msgstr "Опції оплати Taler"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:524
+#, c-format
+msgid "Override default Taler payment settings for this order"
+msgstr ""
+"Перевизначити стандартні налаштування оплати Taler для цього замовлення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:529
+#, fuzzy, c-format
+msgid "Payment time"
+msgstr "Тайм-аут оплати"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:535
+#, fuzzy, c-format
+msgid ""
+"Time for the customer to pay for the offer before it expires. Inventory "
+"products will be reserved until this deadline. Time start to run after the "
+"order is created."
+msgstr ""
+"Термін, до якого клієнт повинен оплатити пропозицію, перш ніж вона "
+"закінчиться. Продукти з інвентарю будуть зарезервовані до цього терміну."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:552
+#, fuzzy, c-format
+msgid "Default"
+msgstr "Сума за замовчуванням"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:561
+#, fuzzy, c-format
+msgid "Refund time"
+msgstr "Повернення здійснено"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:569
+#, fuzzy, c-format
+msgid ""
+"Time while the order can be refunded by the merchant. Time starts after the "
+"order is created."
+msgstr "Час, до якого замовлення може бути повернене продавцем."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:594
+#, fuzzy, c-format
+msgid "Wire transfer time"
+msgstr "Ідентифікатор банківського переказу"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:602
+#, fuzzy, c-format
+msgid ""
+"Time for the exchange to make the wire transfer. Time starts after the order "
+"is created."
+msgstr "Термін, до якого обмінник повинен здійснити банківський переказ."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:628
+#, fuzzy, c-format
+msgid "Auto-refund time"
+msgstr "Затримка автоматичного повернення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:634
+#, c-format
+msgid ""
+"Time until which the wallet will automatically check for refunds without "
+"user interaction."
+msgstr ""
+"Час, до якого гаманець автоматично перевірятиме повернення коштів без "
+"взаємодії з користувачем."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:642
+#, fuzzy, c-format
+msgid "Maximum fee"
+msgstr "Максимальна комісія за переказ"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:643
+#, fuzzy, c-format
+msgid ""
+"Maximum fees the merchant is willing to cover for this order. Higher deposit "
+"fees must be covered in full by the consumer."
+msgstr ""
+"Максимальна комісія за депозит, яку продавець готовий покрити для цього "
+"замовлення. Вищі комісії за депозит повинні бути повністю покриті споживачем."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:649
+#, c-format
+msgid "Create token"
+msgstr "Створити токен"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:650
+#, c-format
+msgid ""
+"If the order ID is easy to guess the token will prevent users to steal "
+"orders from others."
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:656
+#, c-format
+msgid "Minimum age required"
+msgstr "Мінімальний вік"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:657
+#, c-format
+msgid ""
+"Any value greater than 0 will limit the coins able be used to pay this "
+"contract. If empty the age restriction will be defined by the products"
+msgstr ""
+"Будь-яке значення більше 0 обмежуватиме монети, які можуть бути використані "
+"для оплати цього контракту. Якщо порожнє, вікове обмеження визначатиметься "
+"продуктами"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:660
+#, c-format
+msgid "Min age defined by the producs is %1$s"
+msgstr "Мінімальний вік, визначений продуктами, становить %1$s"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:661
+#, c-format
+msgid "No product with age restriction in this order"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:671
+#, c-format
+msgid "Additional information"
+msgstr "Додаткова інформація"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:672
+#, c-format
+msgid "Custom information to be included in the contract for this order."
+msgstr ""
+"Спеціальна інформація, яка буде включена в контракт для цього замовлення."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:681
+#, c-format
+msgid "You must enter a value in JavaScript Object Notation (JSON)."
+msgstr ""
+"Ви повинні ввести значення у форматі JavaScript Object Notation (JSON)."
+
+#: src/paths/instance/orders/create/CreatePage.tsx:707
+#, fuzzy, c-format
+msgid "Custom field name"
+msgstr "Назва будинку"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:793
+#, c-format
+msgid "Disabled"
+msgstr ""
+
+#: src/paths/instance/orders/create/CreatePage.tsx:796
+#, fuzzy, c-format
+msgid "No deadline"
+msgstr "Термін повернення"
+
+#: src/paths/instance/orders/create/CreatePage.tsx:797
+#, c-format
+msgid "Deadline at %1$s"
+msgstr ""
+
+#: src/paths/instance/orders/create/index.tsx:109
+#, fuzzy, c-format
+msgid "Could not create order"
+msgstr "не вдалося створити резерв"
+
+#: src/paths/instance/orders/create/index.tsx:111
+#, c-format
+msgid "No exchange would accept a payment because of KYC requirements."
+msgstr ""
+
+#: src/paths/instance/orders/create/index.tsx:129
+#, c-format
+msgid "No more stock for product with ID \"%1$s\"."
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:75
+#, c-format
+msgid "Orders"
+msgstr "Замовлення"
+
+#: src/paths/instance/orders/list/Table.tsx:81
+#, fuzzy, c-format
+msgid "Create order"
+msgstr "створити замовлення"
+
+#: src/paths/instance/orders/list/Table.tsx:138
+#, c-format
+msgid "Load first page"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:145
+#, c-format
+msgid "Date"
+msgstr "Дата"
+
+#: src/paths/instance/orders/list/Table.tsx:191
+#, c-format
+msgid "Refund"
+msgstr "Повернення"
+
+#: src/paths/instance/orders/list/Table.tsx:200
+#, c-format
+msgid "copy url"
+msgstr "скопіювати url"
+
+#: src/paths/instance/orders/list/Table.tsx:213
+#, fuzzy, c-format
+msgid "Load more orders after the last one"
+msgstr "завантажити більше переказів після останнього"
+
+#: src/paths/instance/orders/list/Table.tsx:216
+#, c-format
+msgid "Load next page"
+msgstr ""
+
+#: src/paths/instance/orders/list/Table.tsx:233
+#, c-format
+msgid "No orders have been found matching your query!"
+msgstr "Замовлення, що відповідають вашому запиту, не знайдено!"
+
+#: src/paths/instance/orders/list/Table.tsx:280
+#, fuzzy, c-format
+msgid "Duplicated"
+msgstr "дубльовано"
+
+#: src/paths/instance/orders/list/Table.tsx:293
+#, fuzzy, c-format
+msgid "This value exceed the refundable amount"
+msgstr "ця сума перевищує суму, що підлягає поверненню"
+
+#: src/paths/instance/orders/list/Table.tsx:381
+#, fuzzy, c-format
+msgid "Amount to be refunded"
+msgstr "сума до повернення"
+
+#: src/paths/instance/orders/list/Table.tsx:383
+#, c-format
+msgid "Max refundable:"
+msgstr "Макс. сума для повернення:"
+
+#: src/paths/instance/orders/list/Table.tsx:391
+#, fuzzy, c-format
+msgid "Requested by the customer"
+msgstr "запитано клієнтом"
+
+#: src/paths/instance/orders/list/Table.tsx:392
+#, fuzzy, c-format
+msgid "Other"
+msgstr "інше"
+
+#: src/paths/instance/orders/list/Table.tsx:395
+#, fuzzy, c-format
+msgid "Why this order is being refunded"
+msgstr "чому це замовлення повертається"
+
+#: src/paths/instance/orders/list/Table.tsx:401
+#, fuzzy, c-format
+msgid "More information to give context"
+msgstr "додаткова інформація для надання контексту"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:70
+#, fuzzy, c-format
+msgid "Contract terms"
+msgstr "Умови контракту"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:76
+#, fuzzy, c-format
+msgid "Human-readable description of the whole purchase"
+msgstr "читабельний опис всієї покупки"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:82
+#, fuzzy, c-format
+msgid "Total price for the transaction"
+msgstr "загальна ціна за транзакцію"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:89
+#, c-format
+msgid "URL for this purchase"
+msgstr "URL для цієї покупки"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:95
+#, c-format
+msgid "Max fee"
+msgstr "Максимальна комісія"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:96
+#, fuzzy, c-format
+msgid "Maximum total deposit fee accepted by the merchant for this contract"
+msgstr ""
+"максимальна загальна комісія за депозит, прийнята продавцем для цього "
+"контракту"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:101
+#, c-format
+msgid "Created at"
+msgstr "Створено о"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:102
+#, fuzzy, c-format
+msgid "Time when this contract was generated"
+msgstr "час, коли цей контракт було згенеровано"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:107
+#, c-format
+msgid "Refund deadline"
+msgstr "Термін повернення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:108
+#, fuzzy, c-format
+msgid "After this deadline has passed no refunds will be accepted"
+msgstr "після цього терміну повернення не приймаються"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:113
+#, c-format
+msgid "Payment deadline"
+msgstr "Термін оплати"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:114
+#, fuzzy, c-format
+msgid ""
+"After this deadline, the merchant won't accept payments for the contract"
+msgstr "після цього терміну продавець не прийматиме платежі за контрактом"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:119
+#, c-format
+msgid "Wire transfer deadline"
+msgstr "Термін банківського переказу"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:120
+#, fuzzy, c-format
+msgid "Transfer deadline for the exchange"
+msgstr "термін переказу для обмінника"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:126
+#, fuzzy, c-format
+msgid "Time indicating when the order should be delivered"
+msgstr "час, що вказує, коли замовлення має бути доставлене"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:132
+#, fuzzy, c-format
+msgid "Where the order will be delivered"
+msgstr "куди буде доставлене замовлення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:140
+#, c-format
+msgid "Auto-refund delay"
+msgstr "Затримка автоматичного повернення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:141
+#, fuzzy, c-format
+msgid ""
+"How long the wallet should try to get an automatic refund for the purchase"
+msgstr ""
+"скільки часу гаманець повинен намагатися отримати автоматичне повернення за "
+"покупку"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:146
+#, c-format
+msgid "Extra info"
+msgstr "Додаткова інформація"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:147
+#, fuzzy, c-format
+msgid "Extra data that is only interpreted by the merchant frontend"
+msgstr "додаткові дані, які інтерпретуються лише фронтендом продавця"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:220
+#, c-format
+msgid "Order"
+msgstr "Замовлення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:222
+#, fuzzy, c-format
+msgid "Claimed"
+msgstr "отримано"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:249
+#, fuzzy, c-format
+msgid "Claimed at"
+msgstr "отримано о"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:271
+#, c-format
+msgid "Timeline"
+msgstr "Хронологія"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:277
+#, c-format
+msgid "Payment details"
+msgstr "Деталі оплати"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:297
+#, c-format
+msgid "Order status"
+msgstr "Статус замовлення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:307
+#, c-format
+msgid "Product list"
+msgstr "Список продуктів"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:459
+#, c-format
+msgid "Paid"
+msgstr "Оплачено"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:463
+#, fuzzy, c-format
+msgid "Wired"
+msgstr "перераховано"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:468
+#, c-format
+msgid "Refunded"
+msgstr "Повернено"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:488
+#, fuzzy, c-format
+msgid "Refund order"
+msgstr "замовлення на повернення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:489
+#, fuzzy, c-format
+msgid "Not refundable"
+msgstr "не підлягає поверненню"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:519
+#, c-format
+msgid "Next event in"
+msgstr ""
+
+#: src/paths/instance/orders/details/DetailPage.tsx:555
+#, c-format
+msgid "Refunded amount"
+msgstr "Повернена сума"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:562
+#, c-format
+msgid "Refund taken"
+msgstr "Повернення здійснено"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:572
+#, c-format
+msgid "Status URL"
+msgstr "URL статусу"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:585
+#, c-format
+msgid "Refund URI"
+msgstr "URI повернення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:639
+#, fuzzy, c-format
+msgid "Unpaid"
+msgstr "неоплачено"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:657
+#, fuzzy, c-format
+msgid "Pay at"
+msgstr "оплачено о"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:710
+#, c-format
+msgid "Order status URL"
+msgstr "URL статусу замовлення"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:714
+#, c-format
+msgid "Payment URI"
+msgstr "URI оплати"
+
+#: src/paths/instance/orders/details/DetailPage.tsx:743
+#, c-format
+msgid ""
+"Unknown order status. This is an error, please contact the administrator."
+msgstr ""
+"Невідомий статус замовлення. Це помилка, будь ласка, зв'яжіться з "
+"адміністратором."
+
+#: src/paths/instance/orders/details/DetailPage.tsx:770
+#, c-format
+msgid "Back"
+msgstr "Назад"
+
+#: src/paths/instance/orders/details/index.tsx:88
+#, fuzzy, c-format
+msgid "Refund created successfully"
+msgstr "повернення успішно створено"
+
+#: src/paths/instance/orders/details/index.tsx:95
+#, fuzzy, c-format
+msgid "Could not create the refund"
+msgstr "не вдалося створити повернення"
+
+#: src/paths/instance/orders/details/index.tsx:97
+#, c-format
+msgid "There are pending KYC requirements."
+msgstr ""
+
+#: src/components/form/JumpToElementById.tsx:39
+#, c-format
+msgid "Missing id"
+msgstr ""
+
+#: src/components/form/JumpToElementById.tsx:48
+#, fuzzy, c-format
+msgid "Not found"
+msgstr "замовлення не знайдено"
+
+#: src/paths/instance/orders/list/ListPage.tsx:83
+#, fuzzy, c-format
+msgid "Select date to show nearby orders"
+msgstr "виберіть дату, щоб показати найближчі замовлення"
+
+#: src/paths/instance/orders/list/ListPage.tsx:96
+#, fuzzy, c-format
+msgid "Only show paid orders"
+msgstr "показувати лише оплачені замовлення"
+
+#: src/paths/instance/orders/list/ListPage.tsx:99
+#, c-format
+msgid "New"
+msgstr "Новий"
+
+#: src/paths/instance/orders/list/ListPage.tsx:116
+#, fuzzy, c-format
+msgid "Only show orders with refunds"
+msgstr "показувати лише замовлення з поверненнями"
+
+#: src/paths/instance/orders/list/ListPage.tsx:126
+#, fuzzy, c-format
+msgid ""
+"Only show orders where customers paid, but wire payments from payment "
+"provider are still pending"
+msgstr ""
+"показувати лише замовлення, де клієнти заплатили, але банківські перекази "
+"від постачальника платежів ще не виконані"
+
+#: src/paths/instance/orders/list/ListPage.tsx:129
+#, c-format
+msgid "Not wired"
+msgstr "Не перераховано"
+
+#: src/paths/instance/orders/list/ListPage.tsx:139
+#, fuzzy, c-format
+msgid "Completed"
+msgstr "Видалено"
+
+#: src/paths/instance/orders/list/ListPage.tsx:146
+#, fuzzy, c-format
+msgid "Remove all filters"
+msgstr "видалити всі фільтри"
+
+#: src/paths/instance/orders/list/ListPage.tsx:164
+#, fuzzy, c-format
+msgid "Clear date filter"
+msgstr "очистити фільтр дати"
+
+#: src/paths/instance/orders/list/ListPage.tsx:178
+#, c-format
+msgid "Jump to date (%1$s)"
+msgstr ""
+
+#: src/paths/instance/orders/list/index.tsx:113
+#, fuzzy, c-format
+msgid "Jump to order with the given product ID"
+msgstr "перейти до замовлення з зазначеним ідентифікатором"
+
+#: src/paths/instance/orders/list/index.tsx:114
+#, fuzzy, c-format
+msgid "Order id"
+msgstr "ідентифікатор замовлення"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:61
+#, c-format
+msgid "Invalid. Please insert only characters and numbers"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:67
+#, fuzzy, c-format
+msgid "Just letters and numbers from 2 to 7"
+msgstr "лише літери та цифри від 2 до 7"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:69
+#, fuzzy, c-format
+msgid "Size of the key must be 32"
+msgstr "розмір ключа повинен бути 32"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:99
+#, c-format
+msgid "Internal id on the system"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:104
+#, c-format
+msgid "Useful to identify the device physically"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:108
+#, c-format
+msgid "Verification algorithm"
+msgstr "Алгоритм перевірки"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:109
+#, c-format
+msgid "Algorithm to use to verify transaction in offline mode"
+msgstr "Алгоритм для використання для перевірки транзакції в офлайн-режимі"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:119
+#, c-format
+msgid "Device key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:121
+#, c-format
+msgid "Be sure to be very hard to guess or use the random generator"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:122
+#, c-format
+msgid "Your device need to have exactly the same value"
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:138
+#, fuzzy, c-format
+msgid "Generate random secret key"
+msgstr "згенерувати випадковий секретний ключ"
+
+#: src/paths/instance/otp_devices/create/CreatePage.tsx:148
+#, fuzzy, c-format
+msgid "Random"
+msgstr "випадковий"
+
+#: src/paths/instance/otp_devices/create/CreatedSuccessfully.tsx:44
+#, c-format
+msgid ""
+"You can scan the next QR code with your device or save the key before "
+"continuing."
+msgstr ""
+
+#: src/paths/instance/otp_devices/create/index.tsx:60
+#, fuzzy, c-format
+msgid "Device added successfully"
+msgstr "повернення успішно створено"
+
+#: src/paths/instance/otp_devices/create/index.tsx:66
+#, fuzzy, c-format
+msgid "Could not add device"
+msgstr "не вдалося створити резерв"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:57
+#, c-format
+msgid "OTP Devices"
+msgstr ""
+
+#: src/paths/instance/otp_devices/list/Table.tsx:62
+#, fuzzy, c-format
+msgid "Add new devices"
+msgstr "додати новий резерв"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:117
+#, fuzzy, c-format
+msgid "Load more devices before the first one"
+msgstr "завантажити більше шаблонів до першого"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:155
+#, fuzzy, c-format
+msgid "Delete selected devices from the database"
+msgstr "видалити вибраний резерв з бази даних"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:170
+#, fuzzy, c-format
+msgid "Load more devices after the last one"
+msgstr "завантажити більше шаблонів після останнього"
+
+#: src/paths/instance/otp_devices/list/Table.tsx:190
+#, fuzzy, c-format
+msgid "There is are devices yet, add more pressing the + sign"
+msgstr "Ще немає інстанцій, додайте більше, натиснувши знак +"
+
+#: src/paths/instance/otp_devices/list/index.tsx:90
+#, fuzzy, c-format
+msgid "Device delete successfully"
+msgstr "шаблон успішно видалено"
+
+#: src/paths/instance/otp_devices/list/index.tsx:95
+#, fuzzy, c-format
+msgid "Could not delete the device"
+msgstr "не вдалося видалити продукт"
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:64
+#, c-format
+msgid "Device:"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:100
+#, fuzzy, c-format
+msgid "Not modified"
+msgstr "Не перераховано"
+
+#: src/paths/instance/otp_devices/update/UpdatePage.tsx:130
+#, c-format
+msgid "Change key"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:119
+#, fuzzy, c-format
+msgid "Could not update template"
+msgstr "не вдалося оновити шаблон"
+
+#: src/paths/instance/otp_devices/update/index.tsx:121
+#, c-format
+msgid "Template id is unknown"
+msgstr ""
+
+#: src/paths/instance/otp_devices/update/index.tsx:129
+#, c-format
+msgid ""
+"The provided information is inconsistent with the current state of the "
+"template"
+msgstr ""
+
+#: src/components/form/InputStock.tsx:99
+#, c-format
+msgid ""
+"Click here to configure the stock of the product, leave it as is and the "
+"backend will not control stock."
+msgstr ""
+"натисніть тут, щоб налаштувати запас продукту, залиште як є, і бекенд не "
+"буде контролювати запас."
+
+#: src/components/form/InputStock.tsx:109
+#, c-format
+msgid "Manage stock"
+msgstr "Керування запасами"
+
+#: src/components/form/InputStock.tsx:115
+#, fuzzy, c-format
+msgid "This product has been configured without stock control"
+msgstr "цей продукт налаштований без контролю запасів"
+
+#: src/components/form/InputStock.tsx:119
+#, c-format
+msgid "Infinite"
+msgstr "Нескінченний"
+
+#: src/components/form/InputStock.tsx:136
+#, fuzzy, c-format
+msgid "Lost can't be greater than current and incoming (max %1$s)"
+msgstr "втрати не можуть бути більшими за поточні та прибуваючі (макс %1$s)"
+
+#: src/components/form/InputStock.tsx:169
+#, c-format
+msgid "Incoming"
+msgstr "Прибуття"
+
+#: src/components/form/InputStock.tsx:170
+#, c-format
+msgid "Lost"
+msgstr "Втрачено"
+
+#: src/components/form/InputStock.tsx:185
+#, c-format
+msgid "Current"
+msgstr "Поточний"
+
+#: src/components/form/InputStock.tsx:189
+#, fuzzy, c-format
+msgid "Remove stock control for this product"
+msgstr "видалити контроль запасів для цього продукту"
+
+#: src/components/form/InputStock.tsx:195
+#, c-format
+msgid "without stock"
+msgstr "без запасу"
+
+#: src/components/form/InputStock.tsx:204
+#, c-format
+msgid "Next restock"
+msgstr "Наступне поповнення"
+
+#: src/components/form/InputStock.tsx:208
+#, fuzzy, c-format
+msgid "Warehouse address"
+msgstr "Адреса рахунку"
+
+#: src/components/form/InputArray.tsx:118
+#, fuzzy, c-format
+msgid "Add element to the list"
+msgstr "додати елемент до списку"
+
+#: src/components/product/ProductForm.tsx:120
+#, fuzzy, c-format
+msgid "Invalid amount"
+msgstr "Фіксована сума"
+
+#: src/components/product/ProductForm.tsx:191
+#, c-format
+msgid "Product identification to use in URLs (for internal use only)."
+msgstr ""
+"ідентифікація продукту для використання в URL (тільки для внутрішнього "
+"використання)."
+
+#: src/components/product/ProductForm.tsx:197
+#, c-format
+msgid "Illustration of the product for customers."
+msgstr "ілюстрація продукту для клієнтів."
+
+#: src/components/product/ProductForm.tsx:203
+#, c-format
+msgid "Product description for customers."
+msgstr "опис продукту для клієнтів."
+
+#: src/components/product/ProductForm.tsx:207
+#, fuzzy, c-format
+msgid "Age restriction"
+msgstr "Обмежений за віком"
+
+#: src/components/product/ProductForm.tsx:208
+#, fuzzy, c-format
+msgid "Is this product restricted for customer below certain age?"
+msgstr "цей продукт обмежений для клієнтів молодше певного віку?"
+
+#: src/components/product/ProductForm.tsx:209
+#, fuzzy, c-format
+msgid "Minimum age of the customer"
+msgstr "Мінімальний вік"
+
+#: src/components/product/ProductForm.tsx:213
+#, fuzzy, c-format
+msgid "Unit name"
+msgstr "Одиниця"
+
+#: src/components/product/ProductForm.tsx:214
+#, c-format
+msgid ""
+"Unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 "
+"items, 5 meters) for customers."
+msgstr ""
+"одиниця, що описує кількість проданого продукту (наприклад, 2 кілограми, 5 "
+"літрів, 3 предмети, 5 метрів) для клієнтів."
+
+#: src/components/product/ProductForm.tsx:215
+#, c-format
+msgid "Example: kg, items or liters"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:219
+#, c-format
+msgid "Price per unit"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:220
+#, c-format
+msgid ""
+"Sale price for customers, including taxes, for above units of the product."
+msgstr ""
+"ціна продажу для клієнтів, включаючи податки, за вищезазначені одиниці "
+"продукту."
+
+#: src/components/product/ProductForm.tsx:224
+#, c-format
+msgid "Stock"
+msgstr "Запас"
+
+#: src/components/product/ProductForm.tsx:226
+#, fuzzy, c-format
+msgid "Inventory for products with finite supply (for internal use only)."
+msgstr ""
+"інвентаризація продукту для продуктів з обмеженим запасом (тільки для "
+"внутрішнього використання)"
+
+#: src/components/product/ProductForm.tsx:231
+#, fuzzy, c-format
+msgid "Taxes included in the product price, exposed to customers."
+msgstr "податки, включені в ціну продукту, показані клієнтам"
+
+#: src/components/product/ProductForm.tsx:235
+#, c-format
+msgid "Categories"
+msgstr ""
+
+#: src/components/product/ProductForm.tsx:241
+#, fuzzy, c-format
+msgid "Search by category description or id"
+msgstr "шукати продукти за їхнім описом або ідентифікатором"
+
+#: src/components/product/ProductForm.tsx:242
+#, c-format
+msgid "Categories where this product will be listed on."
+msgstr "адреса, за якою будуть доставлені продукти."
+
+#: src/paths/instance/products/create/index.tsx:52
+#, c-format
+msgid "Product created successfully"
+msgstr "Продукт успішно створено"
+
+#: src/paths/instance/products/create/index.tsx:58
+#, c-format
+msgid "Could not create product"
+msgstr "Не вдалося створити продукт"
+
+#: src/paths/instance/products/list/Table.tsx:76
+#, c-format
+msgid "Inventory"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:81
+#, fuzzy, c-format
+msgid "Add product to inventory"
+msgstr "додати продукт до інвентарю"
+
+#: src/paths/instance/products/list/Table.tsx:163
+#, c-format
+msgid "Sales"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:169
+#, c-format
+msgid "Sold"
+msgstr "Продано"
+
+#: src/paths/instance/products/list/Table.tsx:235
+#, c-format
+msgid "Free"
+msgstr ""
+
+#: src/paths/instance/products/list/Table.tsx:275
+#, fuzzy, c-format
+msgid "Go to product update page"
+msgstr "перейти на сторінку оновлення продукту"
+
+#: src/paths/instance/products/list/Table.tsx:282
+#, c-format
+msgid "Update"
+msgstr "Оновити"
+
+#: src/paths/instance/products/list/Table.tsx:287
+#, fuzzy, c-format
+msgid "Remove this product from the database"
+msgstr "видалити цей продукт з бази даних"
+
+#: src/paths/instance/products/list/Table.tsx:323
+#, fuzzy, c-format
+msgid "Load more products after the last one"
+msgstr "завантажити більше шаблонів після останнього"
+
+#: src/paths/instance/products/list/Table.tsx:365
+#, fuzzy, c-format
+msgid "Update the product with new price"
+msgstr "оновити продукт з новою ціною"
+
+#: src/paths/instance/products/list/Table.tsx:376
+#, fuzzy, c-format
+msgid "Update product with new price"
+msgstr "оновити продукт з новою ціною"
+
+#: src/paths/instance/products/list/Table.tsx:387
+#, fuzzy, c-format
+msgid "Confirm update"
+msgstr "Підтверджено"
+
+#: src/paths/instance/products/list/Table.tsx:435
+#, fuzzy, c-format
+msgid "Add more elements to the inventory"
+msgstr "додати більше елементів до інвентарю"
+
+#: src/paths/instance/products/list/Table.tsx:440
+#, fuzzy, c-format
+msgid "Report elements lost in the inventory"
+msgstr "повідомити про втрату елементів в інвентарі"
+
+#: src/paths/instance/products/list/Table.tsx:445
+#, fuzzy, c-format
+msgid "New price for the product"
+msgstr "нова ціна для продукту"
+
+#: src/paths/instance/products/list/Table.tsx:457
+#, fuzzy, c-format
+msgid "The are value with errors"
+msgstr "є значення з помилками"
+
+#: src/paths/instance/products/list/Table.tsx:458
+#, fuzzy, c-format
+msgid "Update product with new stock and price"
+msgstr "оновити продукт з новим запасом і ціною"
+
+#: src/paths/instance/products/list/Table.tsx:499
+#, fuzzy, c-format
+msgid "There are no products yet, add more pressing the + sign"
+msgstr "Продуктів ще немає, додайте більше, натиснувши знак +"
+
+#: src/paths/instance/products/list/index.tsx:86
+#, fuzzy, c-format
+msgid "Jump to product with the given product ID"
+msgstr "перейти до замовлення з зазначеним ідентифікатором"
+
+#: src/paths/instance/products/list/index.tsx:87
+#, c-format
+msgid "Product id"
+msgstr "Ідентифікатор продукту"
+
+#: src/paths/instance/products/list/index.tsx:104
+#, fuzzy, c-format
+msgid "Product updated successfully"
+msgstr "продукт успішно оновлено"
+
+#: src/paths/instance/products/list/index.tsx:109
+#, fuzzy, c-format
+msgid "Could not update the product"
+msgstr "не вдалося оновити продукт"
+
+#: src/paths/instance/products/list/index.tsx:144
+#, fuzzy, c-format
+msgid "Product \"%1$s\" (ID: %2$s) has been deleted"
+msgstr "Інстанція \"%1$s\" (ID: %2$s) була видалена"
+
+#: src/paths/instance/products/list/index.tsx:149
+#, fuzzy, c-format
+msgid "Could not delete the product"
+msgstr "не вдалося видалити продукт"
+
+#: src/paths/instance/products/list/index.tsx:165
+#, c-format
+msgid ""
+"If you delete the product named %1$s (ID: %2$s ), the stock and related "
+"information will be lost"
+msgstr ""
+
+#: src/paths/instance/products/list/index.tsx:173
+#, c-format
+msgid "Deleting an product can't be undone."
+msgstr ""
+
+#: src/paths/instance/products/update/UpdatePage.tsx:56
+#, c-format
+msgid "Product id:"
+msgstr "Ідентифікатор продукту:"
+
+#: src/paths/instance/products/update/index.tsx:85
+#, fuzzy, c-format
+msgid "Product (ID: %1$s) has been updated"
+msgstr "Продукт (ID: %1$s) оновлено"
+
+#: src/paths/instance/products/update/index.tsx:91
+#, fuzzy, c-format
+msgid "Could not update product"
+msgstr "не вдалося оновити продукт"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:112
+#, fuzzy, c-format
+msgid "Must be greater that 0"
+msgstr "має бути більше 0"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:119
+#, fuzzy, c-format
+msgid "Too short"
+msgstr "занадто короткий"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:192
+#, c-format
+msgid "Identifier"
+msgstr "Ідентифікатор"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:193
+#, c-format
+msgid "Name of the template in URLs."
+msgstr "Назва шаблону в URL."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:199
+#, c-format
+msgid "Describe what this template stands for"
+msgstr "Опишіть, що представляє цей шаблон"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:206
+#, fuzzy, c-format
+msgid "If specified, this template will create an order with the same summary"
+msgstr "Якщо вказано, цей шаблон створить замовлення з однаковим підсумком"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:210
+#, c-format
+msgid "Summary is editable"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:211
+#, c-format
+msgid "Allow the user to change the summary."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:217
+#, fuzzy, c-format
+msgid "If specified, this template will create an order with the same price"
+msgstr "Якщо вказано, цей шаблон створить замовлення з однаковою ціною"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:221
+#, fuzzy, c-format
+msgid "Amount is editable"
+msgstr "Зарахована сума"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:222
+#, c-format
+msgid "Allow the user to select the amount to pay."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:229
+#, c-format
+msgid "Currency is editable"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:230
+#, c-format
+msgid "Allow the user to change currency."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:232
+#, c-format
+msgid "Supported currencies"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:233
+#, c-format
+msgid "Supported currencies: %1$s"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:241
+#, c-format
+msgid "Minimum age"
+msgstr "Мінімальний вік"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:243
+#, c-format
+msgid "Is this contract restricted to some age?"
+msgstr "Чи обмежений цей контракт за віком?"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:247
+#, c-format
+msgid "Payment timeout"
+msgstr "Тайм-аут оплати"
+
+#: src/paths/instance/templates/create/CreatePage.tsx:249
+#, fuzzy, c-format
+msgid ""
+"How much time the customer has to complete the payment once the order was "
+"created."
+msgstr ""
+"Скільки часу у клієнта для завершення оплати після створення замовлення."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:254
+#, c-format
+msgid "OTP device"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:255
+#, fuzzy, c-format
+msgid "Use to verify transaction while offline."
+msgstr "Алгоритм для використання для перевірки транзакції в офлайн-режимі."
+
+#: src/paths/instance/templates/create/CreatePage.tsx:257
+#, c-format
+msgid "No OTP device."
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:259
+#, c-format
+msgid "Add one first"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:272
+#, c-format
+msgid "No device"
+msgstr ""
+
+#: src/paths/instance/templates/create/CreatePage.tsx:276
+#, c-format
+msgid "Use to verify transaction in offline mode."
+msgstr "Алгоритм для використання для перевірки транзакції в офлайн-режимі."
+
+#: src/paths/instance/templates/create/index.tsx:52
+#, c-format
+msgid "Template has been created"
+msgstr ""
+
+#: src/paths/instance/templates/create/index.tsx:58
+#, fuzzy, c-format
+msgid "Could not create template"
+msgstr "не вдалося оновити шаблон"
+
+#: src/paths/instance/templates/list/Table.tsx:61
+#, c-format
+msgid "Templates"
+msgstr "Шаблони"
+
+#: src/paths/instance/templates/list/Table.tsx:66
+#, fuzzy, c-format
+msgid "Add new templates"
+msgstr "додати нові шаблони"
+
+#: src/paths/instance/templates/list/Table.tsx:127
+#, fuzzy, c-format
+msgid "Load more templates before the first one"
+msgstr "завантажити більше шаблонів до першого"
+
+#: src/paths/instance/templates/list/Table.tsx:165
+#, fuzzy, c-format
+msgid "Delete selected templates from the database"
+msgstr "видалити вибрані шаблони з бази даних"
+
+#: src/paths/instance/templates/list/Table.tsx:172
+#, fuzzy, c-format
+msgid "Use template to create new order"
+msgstr "використовувати шаблон для створення нового замовлення"
+
+#: src/paths/instance/templates/list/Table.tsx:175
+#, fuzzy, c-format
+msgid "Use template"
+msgstr "додати нові шаблони"
+
+#: src/paths/instance/templates/list/Table.tsx:179
+#, fuzzy, c-format
+msgid "Create qr code for the template"
+msgstr "створити QR-код для шаблону"
+
+#: src/paths/instance/templates/list/Table.tsx:194
+#, fuzzy, c-format
+msgid "Load more templates after the last one"
+msgstr "завантажити більше шаблонів після останнього"
+
+#: src/paths/instance/templates/list/Table.tsx:214
+#, fuzzy, c-format
+msgid "There are no templates yet, add more pressing the + sign"
+msgstr "Шаблонів ще немає, додайте більше, натиснувши знак +"
+
+#: src/paths/instance/templates/list/index.tsx:91
+#, fuzzy, c-format
+msgid "Jump to template with the given template ID"
+msgstr "перейти до замовлення з зазначеним ідентифікатором"
+
+#: src/paths/instance/templates/list/index.tsx:92
+#, c-format
+msgid "Template identification"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:132
+#, fuzzy, c-format
+msgid "Template \"%1$s\" (ID: %2$s) has been deleted"
+msgstr "Інстанція \"%1$s\" (ID: %2$s) була видалена"
+
+#: src/paths/instance/templates/list/index.tsx:137
+#, fuzzy, c-format
+msgid "Failed to delete template"
+msgstr "Не вдалося видалити інстанцію"
+
+#: src/paths/instance/templates/list/index.tsx:153
+#, c-format
+msgid "If you delete the template %1$s (ID: %2$s) you may loose information"
+msgstr ""
+
+#: src/paths/instance/templates/list/index.tsx:160
+#, fuzzy, c-format
+msgid "Deleting an template"
+msgstr "завантажити новіші шаблони"
+
+#: src/paths/instance/templates/list/index.tsx:162
+#, fuzzy, c-format
+msgid "can't be undone"
+msgstr "не може бути порожнім"
+
+#: src/paths/instance/templates/qr/QrPage.tsx:77
+#, c-format
+msgid "Print"
+msgstr "Друк"
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:221
+#, c-format
+msgid "If specified, this template will create order with the same summary"
+msgstr "Якщо вказано, цей шаблон створить замовлення з однаковим підсумком"
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:231
+#, fuzzy, c-format
+msgid "If specified, this template will create orders with the same price"
+msgstr "Якщо вказано, цей шаблон створить замовлення з однаковою ціною"
+
+#: src/paths/instance/templates/update/UpdatePage.tsx:263
+#, c-format
+msgid ""
+"How much time has the customer to complete the payment once the order was "
+"created."
+msgstr ""
+"Скільки часу у клієнта для завершення оплати після створення замовлення."
+
+#: src/paths/instance/templates/update/index.tsx:90
+#, c-format
+msgid "Template (ID: %1$s) has been updated"
+msgstr "Шаблон (ID: %1$s) оновлено"
+
+#: src/paths/instance/templates/use/UsePage.tsx:58
+#, fuzzy, c-format
+msgid "An amount is required"
+msgstr "Сума обов'язкова"
+
+#: src/paths/instance/templates/use/UsePage.tsx:60
+#, fuzzy, c-format
+msgid "An order summary is required"
+msgstr "Підсумок замовлення обов'язковий"
+
+#: src/paths/instance/templates/use/UsePage.tsx:88
+#, fuzzy, c-format
+msgid "New order from template"
+msgstr "Нове замовлення для шаблону"
+
+#: src/paths/instance/templates/use/UsePage.tsx:110
+#, c-format
+msgid "Amount of the order"
+msgstr "Сума замовлення"
+
+#: src/paths/instance/templates/use/UsePage.tsx:115
+#, c-format
+msgid "Order summary"
+msgstr "Підсумок замовлення"
+
+#: src/paths/instance/templates/use/index.tsx:125
+#, fuzzy, c-format
+msgid "Could not create order from template"
+msgstr "не вдалося створити замовлення з шаблону"
+
+#: src/paths/instance/token/DetailPage.tsx:57
+#, fuzzy, c-format
+msgid "You need your access token to perform the operation"
+msgstr "Ви встановлюєте токен доступу для нової інстанції"
+
+#: src/paths/instance/token/DetailPage.tsx:74
+#, fuzzy, c-format
+msgid "You are updating the access token from instance with id \"%1$s\""
+msgstr "Ви оновлюєте токен доступу з інстанції з ідентифікатором %1$s"
+
+#: src/paths/instance/token/DetailPage.tsx:105
+#, c-format
+msgid "This instance doesn't have authentication token."
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:106
+#, c-format
+msgid "You can leave it empty if there is another layer of security."
+msgstr ""
+
+#: src/paths/instance/token/DetailPage.tsx:121
+#, fuzzy, c-format
+msgid "Current access token"
+msgstr "Встановити токен доступу"
+
+#: src/paths/instance/token/DetailPage.tsx:126
+#, fuzzy, c-format
+msgid "Clearing the access token will mean public access to the instance."
+msgstr "Видалення токена доступу означатиме публічний доступ до системи."
+
+#: src/paths/instance/token/DetailPage.tsx:142
+#, fuzzy, c-format
+msgid "Clear token"
+msgstr "Чіткий токен"
+
+#: src/paths/instance/token/DetailPage.tsx:177
+#, fuzzy, c-format
+msgid "Confirm change"
+msgstr "Підтвердити зміну"
+
+#: src/paths/instance/token/index.tsx:83
+#, c-format
+msgid "Failed to clear token"
+msgstr "Не вдалося очистити токен"
+
+#: src/paths/instance/token/index.tsx:109
+#, fuzzy, c-format
+msgid "Failed to set new token"
+msgstr "Не вдалося встановити новий токен"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:96
+#, c-format
+msgid "Slug"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:97
+#, fuzzy, c-format
+msgid "Token family slug to use in URLs (for internal use only)"
+msgstr ""
+"ідентифікація продукту для використання в URL (тільки для внутрішнього "
+"використання)"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:101
+#, c-format
+msgid "Kind"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:102
+#, c-format
+msgid "Token family kind"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:109
+#, c-format
+msgid "User-readable token family name"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:115
+#, fuzzy, c-format
+msgid "Token family description for customers"
+msgstr "опис продукту для клієнтів"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:119
+#, fuzzy, c-format
+msgid "Valid After"
+msgstr "Дійсний до"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:120
+#, c-format
+msgid "Token family can issue tokens after this date"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:125
+#, fuzzy, c-format
+msgid "Valid Before"
+msgstr "недійсний формат"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:126
+#, c-format
+msgid "Token family can issue tokens until this date"
+msgstr ""
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:131
+#, fuzzy, c-format
+msgid "Duration"
+msgstr "Термін дії"
+
+#: src/components/tokenfamily/TokenFamilyForm.tsx:132
+#, c-format
+msgid "Validity duration of a issued token"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/create/index.tsx:51
+#, fuzzy, c-format
+msgid "Token familty created successfully"
+msgstr "повернення успішно створено"
+
+#: src/paths/instance/tokenfamilies/create/index.tsx:57
+#, fuzzy, c-format
+msgid "Could not create token family"
+msgstr "не вдалося створити чайові"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:60
+#, c-format
+msgid "Token Families"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:65
+#, c-format
+msgid "Add token family"
+msgstr ""
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:192
+#, fuzzy, c-format
+msgid "Go to token family update page"
+msgstr "перейти на сторінку оновлення продукту"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:204
+#, fuzzy, c-format
+msgid "Remove this token family from the database"
+msgstr "видалити цей продукт з бази даних"
+
+#: src/paths/instance/tokenfamilies/list/Table.tsx:237
+#, fuzzy, c-format
+msgid ""
+"There are no token families yet, add the first one by pressing the + sign."
+msgstr "Шаблонів ще немає, додайте більше, натиснувши знак +."
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:91
+#, fuzzy, c-format
+msgid "Token family updated successfully"
+msgstr "Сімейство токенів успішно оновлено"
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:96
+#, fuzzy, c-format
+msgid "Could not update the token family"
+msgstr "Не вдалося оновити сімейство токенів"
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:129
+#, fuzzy, c-format
+msgid "Token family \"%1$s\" (SLUG: %2$s) has been deleted"
+msgstr "Сімейство токенів \"%1$s\" (SLUG: %2$s) видалено"
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:134
+#, fuzzy, c-format
+msgid "Failed to delete token family"
+msgstr "Не вдалося видалити сімейство токенів"
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:150
+#, fuzzy, c-format
+msgid ""
+"If you delete the %1$s token family (Slug: %2$s), all issued tokens will "
+"become invalid."
+msgstr ""
+"Якщо ви видалите сімейство токенів %1$s (Slug: %2$s), всі випущені токени "
+"стануть недійсними."
+
+#: src/paths/instance/tokenfamilies/list/index.tsx:157
+#, fuzzy, c-format
+msgid "Deleting a token family %1$s ."
+msgstr "Видалення сімейства токенів %1$s ."
+
+#: src/paths/instance/tokenfamilies/update/UpdatePage.tsx:87
+#, fuzzy, c-format
+msgid "Token Family: %1$s"
+msgstr "Сімейство токенів: %1$s"
+
+#: src/paths/instance/tokenfamilies/update/index.tsx:104
+#, fuzzy, c-format
+msgid "Could not update token family"
+msgstr "Не вдалося оновити сімейство токенів"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:62
+#, fuzzy, c-format
+msgid "Check the id, does not look valid"
+msgstr "перевірте ідентифікатор, він виглядає недійсним"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:64
+#, fuzzy, c-format
+msgid "Must have 52 characters, current %1$s"
+msgstr "повинно бути 52 символи, поточний %1$s"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:71
+#, c-format
+msgid "URL doesn't have the right format"
+msgstr "URL має неправильний формат"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:95
+#, c-format
+msgid "Credited bank account"
+msgstr "Зарахований банківський рахунок"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:97
+#, fuzzy, c-format
+msgid "Select an account"
+msgstr "Виберіть один рахунок"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:98
+#, c-format
+msgid "Bank account of the merchant where the payment was received"
+msgstr "Банківський рахунок продавця, на який було отримано платіж"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:102
+#, c-format
+msgid "Wire transfer ID"
+msgstr "Ідентифікатор банківського переказу"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:104
+#, fuzzy, c-format
+msgid ""
+"Unique identifier of the wire transfer used by the exchange, must be 52 "
+"characters long"
+msgstr ""
+"унікальний ідентифікатор банківського переказу, що використовується "
+"обмінником, має бути довжиною 52 символи"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:108
+#, c-format
+msgid "Exchange URL"
+msgstr "URL обмінника"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:109
+#, c-format
+msgid ""
+"Base URL of the exchange that made the transfer, should have been in the "
+"wire transfer subject"
+msgstr ""
+"Основний URL обмінника, який здійснив переказ, має бути в призначенні "
+"банківського переказу"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:114
+#, c-format
+msgid "Amount credited"
+msgstr "Зарахована сума"
+
+#: src/paths/instance/transfers/create/CreatePage.tsx:115
+#, c-format
+msgid "Actual amount that was wired to the merchant's bank account"
+msgstr "Фактична сума, що була переказана на банківський рахунок продавця"
+
+#: src/paths/instance/transfers/create/index.tsx:62
+#, fuzzy, c-format
+msgid "Wire transfer informed successfully"
+msgstr "повернення успішно створено"
+
+#: src/paths/instance/transfers/create/index.tsx:68
+#, fuzzy, c-format
+msgid "Could not inform transfer"
+msgstr "не вдалося повідомити про переказ"
+
+#: src/paths/instance/transfers/list/Table.tsx:62
+#, c-format
+msgid "Transfers"
+msgstr "Перекази"
+
+#: src/paths/instance/transfers/list/Table.tsx:67
+#, fuzzy, c-format
+msgid "Add new transfer"
+msgstr "додати новий переказ"
+
+#: src/paths/instance/transfers/list/Table.tsx:120
+#, fuzzy, c-format
+msgid "Load more transfers before the first one"
+msgstr "завантажити більше переказів до першого"
+
+#: src/paths/instance/transfers/list/Table.tsx:133
+#, c-format
+msgid "Credit"
+msgstr "Кредит"
+
+#: src/paths/instance/transfers/list/Table.tsx:136
+#, c-format
+msgid "Confirmed"
+msgstr "Підтверджено"
+
+#: src/paths/instance/transfers/list/Table.tsx:139
+#, c-format
+msgid "Verified"
+msgstr "Перевірено"
+
+#: src/paths/instance/transfers/list/Table.tsx:142
+#, fuzzy, c-format
+msgid "Executed on"
+msgstr "Виконано о"
+
+#: src/paths/instance/transfers/list/Table.tsx:153
+#, c-format
+msgid "yes"
+msgstr "так"
+
+#: src/paths/instance/transfers/list/Table.tsx:153
+#, c-format
+msgid "no"
+msgstr "ні"
+
+#: src/paths/instance/transfers/list/Table.tsx:158
+#, c-format
+msgid "never"
+msgstr "ніколи"
+
+#: src/paths/instance/transfers/list/Table.tsx:163
+#, c-format
+msgid "unknown"
+msgstr "невідомо"
+
+#: src/paths/instance/transfers/list/Table.tsx:169
+#, fuzzy, c-format
+msgid "Delete selected transfer from the database"
+msgstr "видалити вибраний переказ з бази даних"
+
+#: src/paths/instance/transfers/list/Table.tsx:184
+#, fuzzy, c-format
+msgid "Load more transfers after the last one"
+msgstr "завантажити більше переказів після останнього"
+
+#: src/paths/instance/transfers/list/Table.tsx:204
+#, fuzzy, c-format
+msgid "There are no transfers yet, add more pressing the + sign"
+msgstr "Переказів ще немає, додайте більше, натиснувши знак +"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:83
+#, fuzzy, c-format
+msgid "All accounts"
+msgstr "Рахунок"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:84
+#, fuzzy, c-format
+msgid "Filter by account address"
+msgstr "фільтрувати за адресою рахунку"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:105
+#, fuzzy, c-format
+msgid "Only show wire transfers confirmed by the merchant"
+msgstr "показувати лише перекази, підтверджені продавцем"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:115
+#, fuzzy, c-format
+msgid "Only show wire transfers claimed by the exchange"
+msgstr "показувати лише перекази, заявлені обмінником"
+
+#: src/paths/instance/transfers/list/ListPage.tsx:118
+#, c-format
+msgid "Unverified"
+msgstr "Неперевірений"
+
+#: src/paths/instance/transfers/list/index.tsx:118
+#, c-format
+msgid "Wire transfer \"%1$s...\" has been deleted"
+msgstr "Банківський переказ \"%1$s...\" видалено"
+
+#: src/paths/instance/transfers/list/index.tsx:123
+#, fuzzy, c-format
+msgid "Failed to delete transfer"
+msgstr "Не вдалося видалити переказ"
+
+#: src/paths/admin/create/CreatePage.tsx:86
+#, c-format
+msgid "Must be business or individual"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:104
+#, c-format
+msgid "Pay delay can't be greater than wire transfer delay"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:112
+#, fuzzy, c-format
+msgid "Max 7 lines"
+msgstr "максимум 7 рядків"
+
+#: src/paths/admin/create/CreatePage.tsx:138
+#, c-format
+msgid "Doesn't match"
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:215
+#, fuzzy, c-format
+msgid "Enable access control"
+msgstr "Управління токеном доступу"
+
+#: src/paths/admin/create/CreatePage.tsx:216
+#, c-format
+msgid "Choose if the backend server should authenticate access."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:243
+#, c-format
+msgid "Access control is not yet decided. This instance can't be created."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:250
+#, c-format
+msgid "Authorization must be handled externally."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:256
+#, c-format
+msgid "Authorization is handled by the backend server."
+msgstr ""
+
+#: src/paths/admin/create/CreatePage.tsx:274
+#, c-format
+msgid "Need to complete marked fields and choose authorization method"
+msgstr "Необхідно заповнити позначені поля та вибрати метод авторизації"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:53
+#, c-format
+msgid ""
+"Name of the instance in URLs. The 'default' instance is special in that it "
+"is used to administer other instances."
+msgstr ""
+"Назва інстанції в URL. Інстанція 'default' є особливою, оскільки "
+"використовується для адміністрування інших інстанцій."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:59
+#, c-format
+msgid "Business name"
+msgstr "Назва бізнесу"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:60
+#, c-format
+msgid "Legal name of the business represented by this instance."
+msgstr "Юридична назва бізнесу, який представляє ця інстанція."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:67
+#, c-format
+msgid "Email"
+msgstr "Email"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:68
+#, c-format
+msgid "Contact email"
+msgstr "Контактний email"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:73
+#, c-format
+msgid "Website URL"
+msgstr "URL вебсайту"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:74
+#, c-format
+msgid "URL."
+msgstr "URL."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:79
+#, c-format
+msgid "Logo"
+msgstr "Логотип"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:80
+#, c-format
+msgid "Logo image."
+msgstr "Зображення логотипу."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:86
+#, c-format
+msgid "Physical location of the merchant."
+msgstr "Фізичне розташування продавця."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:93
+#, c-format
+msgid "Jurisdiction"
+msgstr "Юрисдикція"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:94
+#, c-format
+msgid "Jurisdiction for legal disputes with the merchant."
+msgstr "Юрисдикція для правових спорів з продавцем."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:101
+#, c-format
+msgid "Pay transaction fee"
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:102
+#, c-format
+msgid "Assume the cost of the transaction of let the user pay for it."
+msgstr ""
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:107
+#, c-format
+msgid "Default payment delay"
+msgstr "Затримка оплати за замовчуванням"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:109
+#, c-format
+msgid ""
+"Time customers have to pay an order before the offer expires by default."
+msgstr ""
+"Час, який мають клієнти для оплати замовлення до закінчення терміну дії "
+"пропозиції за замовчуванням."
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:114
+#, c-format
+msgid "Default wire transfer delay"
+msgstr "Затримка банківського переказу за замовчуванням"
+
+#: src/components/instance/DefaultInstanceFormFields.tsx:115
+#, c-format
+msgid ""
+"Maximum time an exchange is allowed to delay wiring funds to the merchant, "
+"enabling it to aggregate smaller payments into larger wire transfers and "
+"reducing wire fees."
+msgstr ""
+"Максимальний час, на який обмінник може затримати переказ коштів продавцю, "
+"дозволяючи йому об'єднувати менші платежі у більші банківські перекази та "
+"знижуючи комісії за переказ."
+
+#: src/paths/instance/update/UpdatePage.tsx:124
+#, c-format
+msgid "Instance id"
+msgstr "Ідентифікатор інстанції"
+
+#: src/paths/instance/update/index.tsx:108
+#, fuzzy, c-format
+msgid "Failed to update instance"
+msgstr "Не вдалося створити інстанцію"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:54
+#, c-format
+msgid "Must be \"pay\" or \"refund\""
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:59
+#, fuzzy, c-format
+msgid "Must be one of '%1$s'"
+msgstr "повинно бути одним із '%1$s'"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:85
+#, c-format
+msgid "Webhook ID to use"
+msgstr "ID вебхука для використання"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:89
+#, c-format
+msgid "Event"
+msgstr "Подія"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:91
+#, c-format
+msgid "Pay"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:95
+#, c-format
+msgid "The event of the webhook: why the webhook is used"
+msgstr "Подія вебхука: чому використовується вебхук"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:99
+#, c-format
+msgid "Method"
+msgstr "Метод"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:101
+#, c-format
+msgid "GET"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:102
+#, c-format
+msgid "POST"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:103
+#, c-format
+msgid "PUT"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:104
+#, c-format
+msgid "PATCH"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:105
+#, c-format
+msgid "HEAD"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:108
+#, c-format
+msgid "Method used by the webhook"
+msgstr "Метод, що використовується вебхуком"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:113
+#, c-format
+msgid "URL"
+msgstr "URL"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:114
+#, c-format
+msgid "URL of the webhook where the customer will be redirected"
+msgstr "URL вебхука, куди буде перенаправлений клієнт"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:120
+#, c-format
+msgid ""
+"The text below support %1$s template engine. Any string between %2$s and "
+"%3$s will be replaced with replaced with the value of the corresponding "
+"variable."
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:138
+#, c-format
+msgid "For example %1$s will be replaced with the the order's price"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:145
+#, c-format
+msgid "The short list of variables are:"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:156
+#, fuzzy, c-format
+msgid "order's description"
+msgstr "опис"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:160
+#, fuzzy, c-format
+msgid "order's price"
+msgstr "Ціна замовлення"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:164
+#, c-format
+msgid "order's unique identification"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:172
+#, fuzzy, c-format
+msgid "the amount that was being refunded"
+msgstr "сума до повернення"
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:178
+#, c-format
+msgid "the reason entered by the merchant staff for granting the refund"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:185
+#, c-format
+msgid "time of the refund in nanoseconds since 1970"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:202
+#, c-format
+msgid "Http body"
+msgstr ""
+
+#: src/paths/instance/webhooks/create/CreatePage.tsx:203
+#, c-format
+msgid "Body template by the webhook"
+msgstr "Шаблон тіла вебхука"
+
+#: src/paths/instance/webhooks/create/index.tsx:52
+#, fuzzy, c-format
+msgid "Webhook create successfully"
+msgstr "вебхук успішно видалено"
+
+#: src/paths/instance/webhooks/create/index.tsx:58
+#, fuzzy, c-format
+msgid "Could not create the webhook"
+msgstr "не вдалося видалити вебхук"
+
+#: src/paths/instance/webhooks/create/index.tsx:66
+#, fuzzy, c-format
+msgid "Could not create webhook"
+msgstr "не вдалося видалити вебхук"
+
+#: src/paths/instance/webhooks/list/Table.tsx:57
+#, c-format
+msgid "Webhooks"
+msgstr "Вебхуки"
+
+#: src/paths/instance/webhooks/list/Table.tsx:62
+#, fuzzy, c-format
+msgid "Add new webhooks"
+msgstr "додати нові вебхуки"
+
+#: src/paths/instance/webhooks/list/Table.tsx:117
+#, fuzzy, c-format
+msgid "Load more webhooks before the first one"
+msgstr "завантажити більше вебхуків до першого"
+
+#: src/paths/instance/webhooks/list/Table.tsx:130
+#, c-format
+msgid "Event type"
+msgstr "Тип події"
+
+#: src/paths/instance/webhooks/list/Table.tsx:155
+#, fuzzy, c-format
+msgid "Delete selected webhook from the database"
+msgstr "видалити вибраний вебхук з бази даних"
+
+#: src/paths/instance/webhooks/list/Table.tsx:170
+#, fuzzy, c-format
+msgid "Load more webhooks after the last one"
+msgstr "завантажити більше вебхуків після останнього"
+
+#: src/paths/instance/webhooks/list/Table.tsx:190
+#, fuzzy, c-format
+msgid "There are no webhooks yet, add more pressing the + sign"
+msgstr "Вебхуків ще немає, додайте більше, натиснувши знак +"
+
+#: src/paths/instance/webhooks/list/index.tsx:88
+#, fuzzy, c-format
+msgid "Webhook delete successfully"
+msgstr "вебхук успішно видалено"
+
+#: src/paths/instance/webhooks/list/index.tsx:93
+#, fuzzy, c-format
+msgid "Could not delete the webhook"
+msgstr "не вдалося видалити вебхук"
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:109
+#, c-format
+msgid "Header"
+msgstr "Заголовок"
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:111
+#, c-format
+msgid "Header template of the webhook"
+msgstr "Шаблон заголовка вебхука"
+
+#: src/paths/instance/webhooks/update/UpdatePage.tsx:116
+#, c-format
+msgid "Body"
+msgstr "Тіло"
+
+#: src/paths/instance/webhooks/update/index.tsx:88
+#, fuzzy, c-format
+msgid "Webhook updated"
+msgstr "ID вебхука для використання"
+
+#: src/paths/instance/webhooks/update/index.tsx:94
+#, fuzzy, c-format
+msgid "Could not update webhook"
+msgstr "не вдалося видалити вебхук"
+
+#: src/paths/settings/index.tsx:73
+#, c-format
+msgid "Language"
+msgstr ""
+
+#: src/paths/settings/index.tsx:89
+#, c-format
+msgid "Advance order creation"
+msgstr ""
+
+#: src/paths/settings/index.tsx:90
+#, c-format
+msgid "Shows more options in the order creation form"
+msgstr ""
+
+#: src/paths/settings/index.tsx:94
+#, c-format
+msgid "Advance instance settings"
+msgstr ""
+
+#: src/paths/settings/index.tsx:95
+#, c-format
+msgid "Shows more options in the instance settings form"
+msgstr ""
+
+#: src/paths/settings/index.tsx:100
+#, fuzzy, c-format
+msgid "Date format"
+msgstr "недійсний формат"
+
+#: src/paths/settings/index.tsx:118
+#, c-format
+msgid "How the date is going to be displayed"
+msgstr ""
+
+#: src/paths/settings/index.tsx:121
+#, c-format
+msgid "Developer mode"
+msgstr ""
+
+#: src/paths/settings/index.tsx:122
+#, c-format
+msgid ""
+"Shows more options and tools which are not intended for general audience."
+msgstr ""
+
+#: src/paths/instance/categories/list/Table.tsx:133
+#, fuzzy, c-format
+msgid "Total products"
+msgstr "Загальна ціна"
+
+#: src/paths/instance/categories/list/Table.tsx:164
+#, fuzzy, c-format
+msgid "Delete selected category from the database"
+msgstr "видалити вибраний переказ з бази даних"
+
+#: src/paths/instance/categories/list/Table.tsx:199
+#, fuzzy, c-format
+msgid "There are no categories yet, add more pressing the + sign"
+msgstr "Шаблонів ще немає, додайте більше, натиснувши знак +"
+
+#: src/paths/instance/categories/list/index.tsx:90
+#, fuzzy, c-format
+msgid "Category delete successfully"
+msgstr "шаблон успішно видалено"
+
+#: src/paths/instance/categories/list/index.tsx:95
+#, fuzzy, c-format
+msgid "Could not delete the category"
+msgstr "не вдалося видалити шаблон"
+
+#: src/paths/instance/categories/create/CreatePage.tsx:75
+#, c-format
+msgid "Category name"
+msgstr ""
+
+#: src/paths/instance/categories/create/index.tsx:53
+#, fuzzy, c-format
+msgid "Category added successfully"
+msgstr "шаблон успішно видалено"
+
+#: src/paths/instance/categories/create/index.tsx:59
+#, fuzzy, c-format
+msgid "Could not add category"
+msgstr "не вдалося створити продукт"
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:102
+#, c-format
+msgid "Id:"
+msgstr ""
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:120
+#, c-format
+msgid "Name of the category"
+msgstr "Назва категорії"
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:124
+#, c-format
+msgid "Products"
+msgstr "Товари"
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:133
+#, fuzzy, c-format
+msgid "Search by product description or id"
+msgstr "шукати продукти за їхнім описом або ідентифікатором"
+
+#: src/paths/instance/categories/update/UpdatePage.tsx:134
+#, c-format
+msgid "Products that this category will list."
+msgstr ""
+
+#: src/paths/instance/categories/update/index.tsx:93
+#, fuzzy, c-format
+msgid "Could not update category"
+msgstr "не вдалося оновити шаблон"
+
+#: src/paths/instance/categories/update/index.tsx:95
+#, c-format
+msgid "Category id is unknown"
+msgstr ""
+
+#: src/Routing.tsx:665
+#, c-format
+msgid "Without this the merchant backend will refuse to create new orders."
+msgstr ""
+
+#: src/Routing.tsx:675
+#, c-format
+msgid "Hide for today"
+msgstr "Сховати на сьогодні"
+
+#: src/Routing.tsx:711
+#, fuzzy, c-format
+msgid "KYC verification needed"
+msgstr "Очікування перевірки KYC"
+
+#: src/Routing.tsx:715
+#, c-format
+msgid ""
+"Some transfer are on hold until a KYC process is completed. Go to the KYC "
+"section in the left panel for more information"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:167
+#, fuzzy, c-format
+msgid "Configuration"
+msgstr "Термін дії"
+
+#: src/components/menu/SideBar.tsx:206
+#, c-format
+msgid "Settings"
+msgstr "Налаштування"
+
+#: src/components/menu/SideBar.tsx:216
+#, fuzzy, c-format
+msgid "Access token"
+msgstr "Токен доступу"
+
+#: src/components/menu/SideBar.tsx:224
+#, c-format
+msgid "Connection"
+msgstr "З'єднання"
+
+#: src/components/menu/SideBar.tsx:233
+#, c-format
+msgid "Interface"
+msgstr ""
+
+#: src/components/menu/SideBar.tsx:274
+#, c-format
+msgid "List"
+msgstr "Список"
+
+#: src/components/menu/SideBar.tsx:293
+#, c-format
+msgid "Log out"
+msgstr "Вийти"
+
+#: src/paths/admin/create/index.tsx:54
+#, c-format
+msgid "Failed to create instance"
+msgstr "Не вдалося створити інстанцію"
+
+#: src/Application.tsx:208
+#, c-format
+msgid "checking compatibility with server..."
+msgstr ""
+
+#: src/Application.tsx:217
+#, fuzzy, c-format
+msgid "Contacting the server failed"
+msgstr "Не вдалося підключитися до сервера."
+
+#: src/Application.tsx:229
+#, c-format
+msgid "The server version is not supported"
+msgstr ""
+
+#: src/Application.tsx:230
+#, c-format
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
+msgstr ""
+
+#: src/components/form/InputSecured.tsx:37
+#, c-format
+msgid "Deleting"
+msgstr "Видалення"
+
+#: src/components/form/InputSecured.tsx:41
+#, c-format
+msgid "Changing"
+msgstr "Зміна"
+
+#: src/components/form/InputSecured.tsx:88
+#, c-format
+msgid "Manage access token"
+msgstr "Управління токеном доступу"
+
+#: src/paths/admin/create/InstanceCreatedSuccessfully.tsx:52
+#, fuzzy, c-format
+msgid "Business Name"
+msgstr "Назва бізнесу"
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:114
+#, c-format
+msgid "Order ID"
+msgstr "Ідентифікатор замовлення"
+
+#: src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx:128
+#, c-format
+msgid "Payment URL"
+msgstr "URL оплати"
+
+#, fuzzy, c-format
+#~ msgid "To short"
+#~ msgstr "занадто короткий"
+
+#, fuzzy, c-format
+#~ msgid "Token familty updated successfully"
+#~ msgstr "Сімейство токенів успішно оновлено"
+
+#, c-format
+#~ msgid "Timed out"
+#~ msgstr "Час очікування вичерпано"
+
+#, c-format
+#~ msgid "Target account"
+#~ msgstr "Цільовий рахунок"
+
+#, c-format
+#~ msgid "cannot be empty"
+#~ msgstr "не може бути порожнім"
+
+#, c-format
+#~ msgid "KYC URL"
+#~ msgstr "KYC URL"
+
+#, c-format
+#~ msgid "clear"
+#~ msgstr "очистити"
+
+#, c-format
+#~ msgid "Product"
+#~ msgstr "Продукт"
+
+#, c-format
+#~ msgid "image"
+#~ msgstr "зображення"
+
+#, c-format
+#~ msgid "quantity"
+#~ msgstr "кількість"
+
+#, c-format
+#~ msgid "total price"
+#~ msgstr "загальна ціна"
+
+#, c-format
+#~ msgid "not a valid json"
+#~ msgstr "недійсний json"
+
+#, c-format
+#~ msgid "Auto-refund deadline"
+#~ msgstr "Термін автоматичного повернення"
+
+#, c-format
+#~ msgid "Maximum deposit fee"
+#~ msgstr "Максимальна комісія за депозит"
+
+#, c-format
+#~ msgid ""
+#~ "Maximum aggregate wire fees the merchant is willing to cover for this "
+#~ "order. Wire fees exceeding this amount are to be covered by the customers."
+#~ msgstr ""
+#~ "Максимальна сукупна комісія за переказ, яку продавець готовий покрити для "
+#~ "цього замовлення. Комісії за переказ, що перевищують цю суму, повинні "
+#~ "бути покриті клієнтами."
+
+#, c-format
+#~ msgid "Wire fee amortization"
+#~ msgstr "Амортизація комісії за переказ"
+
+#, c-format
+#~ msgid ""
+#~ "Factor by which wire fees exceeding the above threshold are divided to "
+#~ "determine the share of excess wire fees to be paid explicitly by the "
+#~ "consumer."
+#~ msgstr ""
+#~ "Коефіцієнт, за яким комісії за переказ, що перевищують вищезазначений "
+#~ "поріг, діляться для визначення частки надлишкових комісій за переказ, яку "
+#~ "повинен сплатити споживач."
+
+#, c-format
+#~ msgid ""
+#~ "Uncheck this option if the merchant backend generated an order ID with "
+#~ "enough entropy to prevent adversarial claims."
+#~ msgstr ""
+#~ "Зніміть цю опцію, якщо бекенд продавця згенерував ідентифікатор "
+#~ "замовлення з достатньою ентропією для запобігання ворожих претензій."
+
+#, c-format
+#~ msgid "load newer orders"
+#~ msgstr "завантажити нові замовлення"
+
+#, c-format
+#~ msgid "load older orders"
+#~ msgstr "завантажити старіші замовлення"
+
+#, c-format
+#~ msgid "date"
+#~ msgstr "дата"
+
+#, c-format
+#~ msgid "amount"
+#~ msgstr "сума"
+
+#, c-format
+#~ msgid "reason"
+#~ msgstr "причина"
+
+#, c-format
+#~ msgid "Max wire fee"
+#~ msgstr "Максимальна комісія за переказ"
+
+#, c-format
+#~ msgid "maximum wire fee accepted by the merchant"
+#~ msgstr "максимальна комісія за переказ, прийнята продавцем"
+
+#, c-format
+#~ msgid ""
+#~ "over how many customer transactions does the merchant expect to amortize "
+#~ "wire fees on average"
+#~ msgstr ""
+#~ "на скільки транзакцій з клієнтами продавець очікує амортизувати комісії "
+#~ "за переказ в середньому"
+
+#, c-format
+#~ msgid "paid"
+#~ msgstr "оплачено"
+
+#, c-format
+#~ msgid "refunded"
+#~ msgstr "повернено"
+
+#, c-format
+#~ msgid "refund"
+#~ msgstr "повернення"
+
+#, c-format
+#~ msgid "created at"
+#~ msgstr "створено о"
+
+#, c-format
+#~ msgid "date (YYYY/MM/DD)"
+#~ msgstr "дата (РРРР/ММ/ДД)"
+
+#, c-format
+#~ msgid "could not get the order to refund"
+#~ msgstr "не вдалося отримати замовлення для повернення"
+
+#, c-format
+#~ msgid "Delivery address"
+#~ msgstr "Адреса доставки"
+
+#, c-format
+#~ msgid "Sell"
+#~ msgstr "Продати"
+
+#, c-format
+#~ msgid "Profit"
+#~ msgstr "Прибуток"
+
+#, c-format
+#~ msgid "free"
+#~ msgstr "безкоштовно"
+
+#, c-format
+#~ msgid ""
+#~ "To complete the setup of the reserve, you must now initiate a wire "
+#~ "transfer using the given wire transfer subject and crediting the "
+#~ "specified amount to the indicated account of the exchange."
+#~ msgstr ""
+#~ "Щоб завершити налаштування резерву, вам потрібно ініціювати банківський "
+#~ "переказ, використовуючи дане призначення переказу, і зарахувати зазначену "
+#~ "суму на вказаний рахунок обмінника."
+
+#, c-format
+#~ msgid ""
+#~ "If your system supports RFC 8905, you can do this by opening this URI:"
+#~ msgstr ""
+#~ "Якщо ваша система підтримує RFC 8905, ви можете зробити це, відкривши цей "
+#~ "URI:"
+
+#, c-format
+#~ msgid "it should be greater than 0"
+#~ msgstr "це повинно бути більше 0"
+
+#, c-format
+#~ msgid "must be a valid URL"
+#~ msgstr "повинен бути дійсний URL"
+
+#, c-format
+#~ msgid "Initial balance"
+#~ msgstr "Початковий баланс"
+
+#, c-format
+#~ msgid "balance prior to deposit"
+#~ msgstr "баланс до внесення депозиту"
+
+#, c-format
+#~ msgid "Next"
+#~ msgstr "Далі"
+
+#, c-format
+#~ msgid "method to use for wire transfer"
+#~ msgstr "метод для використання при банківському переказі"
+
+#, c-format
+#~ msgid "Select one wire method"
+#~ msgstr "Виберіть один метод переказу"
+
+#, c-format
+#~ msgid "Created balance"
+#~ msgstr "Створений баланс"
+
+#, c-format
+#~ msgid "Exchange balance"
+#~ msgstr "Баланс обмінника"
+
+#, c-format
+#~ msgid "Picked up"
+#~ msgstr "Отримано"
+
+#, c-format
+#~ msgid "Committed"
+#~ msgstr "Затверджено"
+
+#, c-format
+#~ msgid "Tips"
+#~ msgstr "Чайові"
+
+#, c-format
+#~ msgid "No tips has been authorized from this reserve"
+#~ msgstr "З цього резерву не було авторизовано чайових"
+
+#, c-format
+#~ msgid "Authorized"
+#~ msgstr "Авторизовано"
+
+#, c-format
+#~ msgid "amount of tip"
+#~ msgstr "сума чайових"
+
+#, c-format
+#~ msgid "Justification"
+#~ msgstr "Обґрунтування"
+
+#, c-format
+#~ msgid "reason for the tip"
+#~ msgstr "причина для чайових"
+
+#, c-format
+#~ msgid "URL after tip"
+#~ msgstr "URL після чайових"
+
+#, c-format
+#~ msgid "URL to visit after tip payment"
+#~ msgstr "URL для відвідування після оплати чайових"
+
+#, c-format
+#~ msgid "Reserves not yet funded"
+#~ msgstr "Резерви ще не профінансовані"
+
+#, c-format
+#~ msgid "Reserves ready"
+#~ msgstr "Резерви готові"
+
+#, c-format
+#~ msgid "Expires at"
+#~ msgstr "Закінчується о"
+
+#, c-format
+#~ msgid "Initial"
+#~ msgstr "Початковий"
+
+#, c-format
+#~ msgid "authorize new tip from selected reserve"
+#~ msgstr "авторизувати нові чайові з вибраного резерву"
+
+#, c-format
+#~ msgid ""
+#~ "There is no ready reserves yet, add more pressing the + sign or fund them"
+#~ msgstr ""
+#~ "Готових резервів ще немає, додайте більше, натиснувши знак + або "
+#~ "профінансуйте їх"
+
+#, c-format
+#~ msgid "Expected Balance"
+#~ msgstr "Очікуваний баланс"
+
+#, c-format
+#~ msgid "should not be empty"
+#~ msgstr "не повинно бути порожнім"
+
+#, c-format
+#~ msgid "should be greater that 0"
+#~ msgstr "повинно бути більше 0"
+
+#, c-format
+#~ msgid "Fixed summary"
+#~ msgstr "Фіксований підсумок"
+
+#, c-format
+#~ msgid "Fixed price"
+#~ msgstr "Фіксована ціна"
+
+#, c-format
+#~ msgid "Point-of-sale key"
+#~ msgstr "Ключ точки продажу"
+
+#, c-format
+#~ msgid "Useful to validate the purchase"
+#~ msgstr "Корисний для підтвердження покупки"
+
+#, c-format
+#~ msgid "show secret key"
+#~ msgstr "показати секретний ключ"
+
+#, c-format
+#~ msgid "hide secret key"
+#~ msgstr "приховати секретний ключ"
+
+#, c-format
+#~ msgid "hide"
+#~ msgstr "приховати"
+
+#, c-format
+#~ msgid "show"
+#~ msgstr "показати"
+
+#, c-format
+#~ msgid "could not inform template"
+#~ msgstr "не вдалося сформувати шаблон"
+
+#, c-format
+#~ msgid ""
+#~ "Here you can specify a default value for fields that are not fixed. "
+#~ "Default values can be edited by the customer before the payment."
+#~ msgstr ""
+#~ "Тут ви можете вказати значення за замовчуванням для полів, які не є "
+#~ "фіксованими. Значення за замовчуванням можуть бути відредаговані клієнтом "
+#~ "перед оплатою."
+
+#, c-format
+#~ msgid "Default summary"
+#~ msgstr "Підсумок за замовчуванням"
+
+#, c-format
+#~ msgid "Setup TOTP"
+#~ msgstr "Налаштування TOTP"
+
+#, c-format
+#~ msgid "load older templates"
+#~ msgstr "завантажити старіші шаблони"
+
+#, c-format
+#~ msgid "load newer webhooks"
+#~ msgstr "завантажити новіші вебхуки"
+
+#, c-format
+#~ msgid "load older webhooks"
+#~ msgstr "завантажити старіші вебхуки"
+
+#, c-format
+#~ msgid "load newer transfers"
+#~ msgstr "завантажити новіші перекази"
+
+#, c-format
+#~ msgid "load older transfers"
+#~ msgstr "завантажити старіші перекази"
+
+#, c-format
+#~ msgid "is not valid"
+#~ msgstr "недійсний"
+
+#, c-format
+#~ msgid "must be 1 or greater"
+#~ msgstr "має бути 1 або більше"
+
+#, c-format
+#~ msgid "change authorization configuration"
+#~ msgstr "змінити конфігурацію авторизації"
+
+#, c-format
+#~ msgid "Target type"
+#~ msgstr "Тип цілі"
+
+#, c-format
+#~ msgid "Bank account owner's name."
+#~ msgstr "Ім'я власника банківського рахунку."
+
+#, c-format
+#~ msgid "No accounts yet."
+#~ msgstr "Ще немає рахунків."
+
+#, c-format
+#~ msgid "Default max deposit fee"
+#~ msgstr "Максимальна комісія за депозит за замовчуванням"
+
+#, c-format
+#~ msgid ""
+#~ "Maximum deposit fees this merchant is willing to pay per order by default."
+#~ msgstr ""
+#~ "Максимальна комісія за депозит, яку цей продавець готовий платити за "
+#~ "замовлення за замовчуванням."
+
+#, c-format
+#~ msgid "Default max wire fee"
+#~ msgstr "Максимальна комісія за переказ за замовчуванням"
+
+#, c-format
+#~ msgid ""
+#~ "Maximum wire fees this merchant is willing to pay per wire transfer by "
+#~ "default."
+#~ msgstr ""
+#~ "Максимальна комісія за переказ, яку цей продавець готовий платити за "
+#~ "банківський переказ за замовчуванням."
+
+#, c-format
+#~ msgid "Default wire fee amortization"
+#~ msgstr "Амортизація комісії за переказ за замовчуванням"
+
+#, c-format
+#~ msgid ""
+#~ "Number of orders excess wire transfer fees will be divided by to compute "
+#~ "per order surcharge."
+#~ msgstr ""
+#~ "Кількість замовлень, на яку буде розподілена комісія за перевищення "
+#~ "банківських переказів, щоб обчислити додаткову плату за замовлення."
+
+#, c-format
+#~ msgid "Change the authorization method use for this instance."
+#~ msgstr "Змінити метод авторизації, що використовується для цієї інстанції."
+
+#, c-format
+#~ msgid "The request to the backend take too long and was cancelled"
+#~ msgstr "Запит до бекенду тривав занадто довго і був скасований"
+
+#, c-format
+#~ msgid "Diagnostic from %1$s is \"%2$s\""
+#~ msgstr "Діагностика від %1$s: \"%2$s\""
+
+#, c-format
+#~ msgid "The backend reported a problem: HTTP status #%1$s"
+#~ msgstr "Бекенд повідомив про проблему: HTTP статус #%1$s"
+
+#, c-format
+#~ msgid "Diagnostic from %1$s is '%2$s'"
+#~ msgstr "Діагностика від %1$s: '%2$s'"
+
+#, c-format
+#~ msgid "Access denied"
+#~ msgstr "Доступ заборонено"
+
+#, c-format
+#~ msgid "The access token provided is invalid."
+#~ msgstr "Наданий токен доступу є недійсним."
+
+#, c-format
+#~ msgid "The access token provided is invalid"
+#~ msgstr "Наданий токен доступу є недійсним"
+
+#, c-format
+#~ msgid "Instance"
+#~ msgstr "Інстанція"
+
+#, c-format
+#~ msgid "Check your token is valid"
+#~ msgstr "Перевірте, чи є ваш токен дійсним"
+
+#, c-format
+#~ msgid "Could not infer instance id from url %1$s"
+#~ msgstr "Не вдалося визначити ідентифікатор інстанції з URL %1$s"
+
+#, c-format
+#~ msgid "Server not found"
+#~ msgstr "Сервер не знайдено"
+
+#, c-format
+#~ msgid "Got message %1$s from %2$s"
+#~ msgstr "Отримано повідомлення %1$s від %2$s"
+
+#, c-format
+#~ msgid "Response from server is unreadable, http status: %1$s"
+#~ msgstr "Відповідь від сервера не читається, HTTP статус: %1$s"
+
+#, c-format
+#~ msgid "The value %1$s is invalid for a payment url"
+#~ msgstr "Значення %1$s є недійсним для URL оплати"
+
+#, c-format
+#~ msgid "add"
+#~ msgstr "додати"
diff --git a/packages/merchant-backoffice-ui/src/lang.ts b/packages/merchant-backoffice-ui/src/lang.ts
new file mode 100644
index 000000000..53cdf99f1
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/lang.ts
@@ -0,0 +1,126 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { strings } from "./i18n/strings.js";
+
+const keys = Object.keys(strings);
+type Actions = "SHOW_STATS" | "SHOW_MISSING" | "SUGGEST";
+const options = process.argv.reduce(
+ (prev, arg, idx, arr) => {
+ if (arg === "--missing") {
+ prev.ACTION = "SHOW_MISSING";
+ }
+ if (arg === "--lang") {
+ prev.lang = idx + 1 < arr.length ? arr[idx + 1] : undefined;
+ }
+ if (arg === "--suggest") {
+ prev.ACTION = "SUGGEST";
+ }
+ return prev;
+ },
+ {
+ ACTION: "SHOW_STATS" as Actions,
+ lang: undefined as string | undefined,
+ },
+);
+
+switch (options.ACTION) {
+ case "SHOW_MISSING": {
+ keys.forEach((key) => {
+ if (options.lang && options.lang !== key) {
+ return;
+ }
+ const msgs = Object.entries(
+ strings[key].locale_data.messages as Record<string, string[]>,
+ );
+ let empty = msgs.filter(([key, value]) => {
+ if (!value || !value.length || !value[0]) return true;
+ return false;
+ });
+ empty.forEach((msg) => {
+ console.log(msg[0]);
+ });
+ });
+ break;
+ }
+ case "SUGGEST": {
+ keys.forEach((key) => {
+ if (options.lang && options.lang !== key) {
+ return;
+ }
+ // const content = fs.readFileSync(`./src/i18n/${key}.po`).toString("utf-8")
+ const content = `#: src/Application.tsx:208
+#, c-format
+msgid "checking compatibility with server..."
+msgstr ""
+
+#: src/Application.tsx:217
+#, fuzzy, c-format
+msgid "Contacting the server failed"
+msgstr "No se pudo aceder al servidor"
+
+#: src/Application.tsx:229
+#, c-format
+msgid "The server version is not supported"
+msgstr ""
+
+#: src/Application.tsx:230
+#, c-format
+msgid "Supported version \"%1$s\", server version \"%2$s\"."
+msgstr ""
+`
+ const msgs = Object.entries(
+ strings[key].locale_data.messages as Record<string, string[]>,
+ );
+ let empty = msgs.filter(([key, value]) => {
+ if (!value || !value.length || !value[0]) return true;
+ return false;
+ });
+ empty.forEach((msg) => {
+ const search = new RegExp(`\n\n(#.*\n)+msgid "${msg[0]}"\nmsgstr .*\n\n`,"gm");
+ const res = search.exec(content)
+ if (res) {
+ console.log(res[0].trim())
+ }
+ });
+
+ })
+ break;
+ }
+ case "SHOW_STATS": {
+ keys.forEach((key) => {
+ const com = strings[key].completeness as number;
+ const msgs = Object.entries(
+ strings[key].locale_data.messages as Record<string, string[]>,
+ );
+ const empty = msgs.filter(([key, value]) => {
+ if (!value || !value.length || !value[0]) return true;
+ return false;
+ }).length;
+ console.log(
+ ` * ${key}: ${com.toLocaleString(undefined, {
+ minimumIntegerDigits: 2,
+ })}% ${(msgs.length - empty).toLocaleString(undefined, {
+ minimumIntegerDigits: 3,
+ })} of ${msgs.length}`,
+ );
+ });
+ break;
+ }
+ default: {
+ throw Error(`unknown action: ${options.ACTION}`);
+ }
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
index 6a94109a0..406cfd698 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
@@ -25,26 +25,24 @@ import {
createRFC8959AccessTokenPlain,
} from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { VNode, h } from "preact";
+import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { AsyncButton } from "../../../components/exception/AsyncButton.js";
import {
FormErrors,
FormProvider,
} from "../../../components/form/FormProvider.js";
+import { Input } from "../../../components/form/Input.js";
import { DefaultInstanceFormFields } from "../../../components/instance/DefaultInstanceFormFields.js";
-import { SetTokenNewInstanceModal } from "../../../components/modal/index.js";
import { usePreference } from "../../../hooks/preference.js";
import { INSTANCE_ID_REGEX } from "../../../utils/constants.js";
import { undefinedIfEmpty } from "../../../utils/table.js";
+import { InputToggle } from "../../../components/form/InputToggle.js";
-export type Entity = Omit<
- Omit<TalerMerchantApi.InstanceConfigurationMessage, "default_pay_delay">,
- "default_wire_transfer_delay"
-> & {
+export type Entity = TalerMerchantApi.InstanceConfigurationMessage & {
auth_token?: string;
- default_pay_delay: Duration;
- default_wire_transfer_delay: Duration;
+ // default_pay_delay: Duration;
+ // default_wire_transfer_delay: Duration;
};
interface Props {
@@ -53,139 +51,116 @@ interface Props {
forceId?: string;
}
+const twoHours = Duration.fromSpec({ hours: 2 });
+const twoDays = Duration.fromSpec({ days: 2 });
+
function with_defaults(id?: string): Partial<Entity> {
return {
id,
- // accounts: [],
user_type: "business",
use_stefan: true,
- default_pay_delay: { d_ms: 2 * 60 * 60 * 1000 }, // two hours
- default_wire_transfer_delay: { d_ms: 2 * 60 * 60 * 24 * 1000 }, // two days
+ default_pay_delay: Duration.toTalerProtocolDuration(twoHours),
+ default_wire_transfer_delay: Duration.toTalerProtocolDuration(twoDays),
};
}
+type TokenForm = { accessControl: boolean; token: string; repeat: string };
+
export function CreatePage({ onCreate, onBack, forceId }: Props): VNode {
const [pref, updatePref] = usePreference();
const { i18n } = useTranslationContext();
const [value, valueHandler] = useState(with_defaults(forceId));
- const [isTokenSet, updateIsTokenSet] = useState<boolean>(false);
- const [isTokenDialogActive, updateIsTokenDialogActive] =
- useState<boolean>(false);
+ const [tokenForm, setTokenForm] = useState<Partial<TokenForm>>({});
- const errors: FormErrors<Entity> = {
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
id: !value.id
- ? i18n.str`required`
+ ? i18n.str`Required`
: !INSTANCE_ID_REGEX.test(value.id)
- ? i18n.str`is not valid`
+ ? i18n.str`Invalid`
: undefined,
- name: !value.name ? i18n.str`required` : undefined,
+ name: !value.name ? i18n.str`Required` : undefined,
user_type: !value.user_type
- ? i18n.str`required`
+ ? i18n.str`Required`
: value.user_type !== "business" && value.user_type !== "individual"
- ? i18n.str`should be business or individual`
+ ? i18n.str`Must be business or individual`
: undefined,
// accounts:
// !value.accounts || !value.accounts.length
- // ? i18n.str`required`
+ // ? i18n.str`Required`
// : undefinedIfEmpty(
// value.accounts.map((p) => {
// return !PAYTO_REGEX.test(p.payto_uri)
- // ? i18n.str`is not valid`
+ // ? i18n.str`Invalid`
// : undefined;
// }),
// ),
default_pay_delay: !value.default_pay_delay
- ? i18n.str`required`
- : !!value.default_wire_transfer_delay &&
- value.default_wire_transfer_delay.d_ms !== "forever" &&
- value.default_pay_delay.d_ms !== "forever" &&
- value.default_pay_delay.d_ms > value.default_wire_transfer_delay.d_ms
- ? i18n.str`pay delay can't be greater than wire transfer delay`
+ ? i18n.str`Required`
+ : value.default_wire_transfer_delay !== undefined &&
+ value.default_wire_transfer_delay.d_us !== "forever" &&
+ value.default_pay_delay.d_us !== "forever" &&
+ value.default_pay_delay.d_us > value.default_wire_transfer_delay.d_us
+ ? i18n.str`Pay delay can't be greater than wire transfer delay`
: undefined,
default_wire_transfer_delay: !value.default_wire_transfer_delay
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined,
address: undefinedIfEmpty({
address_lines:
value.address?.address_lines && value.address?.address_lines.length > 7
- ? i18n.str`max 7 lines`
+ ? i18n.str`Max 7 lines`
: undefined,
}),
jurisdiction: undefinedIfEmpty({
address_lines:
value.address?.address_lines && value.address?.address_lines.length > 7
- ? i18n.str`max 7 lines`
+ ? i18n.str`Max 7 lines`
: undefined,
}),
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as Record<string, unknown>)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
+
+ const tokenFormErrors = undefinedIfEmpty<FormErrors<TokenForm>>({
+ token:
+ tokenForm.accessControl === false
+ ? undefined
+ : !tokenForm.token
+ ? i18n.str`Required`
+ : undefined,
+ repeat:
+ tokenForm.accessControl === false
+ ? undefined
+ : !tokenForm.repeat
+ ? i18n.str`Required`
+ : tokenForm.repeat !== tokenForm.token
+ ? i18n.str`Doesn't match`
+ : undefined,
+ });
+
+ const hasTokenErrors = tokenFormErrors === undefined;
const submit = (): Promise<void> => {
// use conversion instead of this
const newValue = structuredClone(value);
- const newToken = newValue.auth_token;
+ const accessControl = !!tokenForm.accessControl;
newValue.auth_token = undefined;
- newValue.auth =
- newToken === null || newToken === undefined
- ? { method: "external" }
- : { method: "token", token: createRFC8959AccessTokenPlain(newToken) };
+ newValue.auth = !accessControl
+ ? { method: "external" }
+ : {
+ method: "token",
+ token: createRFC8959AccessTokenPlain(tokenForm.token!),
+ };
if (!newValue.address) newValue.address = {};
if (!newValue.jurisdiction) newValue.jurisdiction = {};
- // remove above use conversion
- // schema.validateSync(value, { abortEarly: false })
- newValue.default_pay_delay = Duration.toTalerProtocolDuration(
- newValue.default_pay_delay!,
- ) as any;
- newValue.default_wire_transfer_delay = Duration.toTalerProtocolDuration(
- newValue.default_wire_transfer_delay!,
- ) as any;
- // delete value.default_pay_delay;
- // delete value.default_wire_transfer_delay;
- return onCreate(
- newValue as any as TalerMerchantApi.InstanceConfigurationMessage,
- );
+ return onCreate(newValue as TalerMerchantApi.InstanceConfigurationMessage);
};
- function updateToken(token: string | null) {
- valueHandler((old) => ({
- ...old,
- auth_token: token === null ? undefined : token,
- }));
- }
-
return (
<div>
- <div class="columns">
- <div class="column" />
- <div class="column is-four-fifths">
- {isTokenDialogActive && (
- <SetTokenNewInstanceModal
- onCancel={() => {
- updateIsTokenDialogActive(false);
- updateIsTokenSet(false);
- }}
- onClear={() => {
- updateToken(null);
- updateIsTokenDialogActive(false);
- updateIsTokenSet(true);
- }}
- onConfirm={(newToken) => {
- updateToken(newToken);
- updateIsTokenDialogActive(false);
- updateIsTokenSet(true);
- }}
- />
- )}
- </div>
- <div class="column" />
- </div>
-
<section class="section is-main-section">
<div class="tabs is-toggle is-fullwidth is-small">
<ul>
@@ -229,51 +204,57 @@ export function CreatePage({ onCreate, onBack, forceId }: Props): VNode {
showLessFields={!pref.advanceInstanceMode}
/>
</FormProvider>
-
- <div class="level">
- <div class="level-item has-text-centered">
- <h1 class="title">
- <button
- class={
- !isTokenSet
- ? "button is-danger has-tooltip-bottom"
- : !value.auth_token
- ? "button has-tooltip-bottom"
- : "button is-info has-tooltip-bottom"
- }
- data-tooltip={i18n.str`change authorization configuration`}
- onClick={() => updateIsTokenDialogActive(true)}
- >
- <div class="icon is-centered">
- <i class="mdi mdi-lock-reset" />
- </div>
- <span>
- <i18n.Translate>Set access token</i18n.Translate>
- </span>
- </button>
- </h1>
- </div>
- </div>
+ <FormProvider
+ errors={tokenFormErrors}
+ object={tokenForm}
+ valueHandler={setTokenForm}
+ >
+ <InputToggle<TokenForm>
+ name="accessControl"
+ threeState={tokenForm.accessControl === undefined}
+ label={i18n.str`Enable access control`}
+ help={i18n.str`Choose if the backend server should authenticate access.`}
+ />
+ <Input<TokenForm>
+ name="token"
+ label={i18n.str`New access token`}
+ tooltip={i18n.str`Next access token to be used`}
+ readonly={
+ tokenForm.accessControl === false ||
+ tokenForm.accessControl === undefined
+ }
+ inputType="password"
+ />
+ <Input<TokenForm>
+ name="repeat"
+ label={i18n.str`Repeat access token`}
+ tooltip={i18n.str`Confirm the same access token`}
+ readonly={
+ tokenForm.accessControl === false ||
+ tokenForm.accessControl === undefined
+ }
+ inputType="password"
+ />
+ </FormProvider>
<div class="level">
<div class="level-item has-text-centered">
- {!isTokenSet ? (
+ {tokenForm.accessControl === undefined ? (
<p class="is-size-6">
<i18n.Translate>
- Access token is not yet configured. This instance can't be
+ Access control is not yet decided. This instance can't be
created.
</i18n.Translate>
</p>
- ) : value.auth_token === undefined ? (
+ ) : !tokenForm.accessControl ? (
<p class="is-size-6">
<i18n.Translate>
- No access token. Authorization must be handled externally.
+ Authorization must be handled externally.
</i18n.Translate>
</p>
) : (
<p class="is-size-6">
<i18n.Translate>
- Access token is set. Authorization is handled by the
- merchant backend.
+ Authorization is handled by the backend server.
</i18n.Translate>
</p>
)}
@@ -287,11 +268,11 @@ export function CreatePage({ onCreate, onBack, forceId }: Props): VNode {
)}
<AsyncButton
onClick={submit}
- disabled={hasErrors || !isTokenSet}
+ disabled={hasErrors || !hasTokenErrors}
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields and choose authorization method`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
>
<i18n.Translate>Confirm</i18n.Translate>
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx b/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx
index 939f9b06a..0f88688c7 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx
@@ -20,6 +20,7 @@
import { h, VNode } from "preact";
import { CreatedSuccessfully } from "../../../components/notifications/CreatedSuccessfully.js";
import { Entity } from "./index.js";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
export function InstanceCreatedSuccessfully({
entity,
@@ -28,11 +29,14 @@ export function InstanceCreatedSuccessfully({
entity: Entity;
onConfirm: () => void;
}): VNode {
+ const { i18n } = useTranslationContext();
return (
<CreatedSuccessfully onConfirm={onConfirm}>
<div class="field is-horizontal">
<div class="field-label is-normal">
- <label class="label">ID</label>
+ <label class="label">
+ <i18n.Translate>ID</i18n.Translate>
+ </label>
</div>
<div class="field-body is-flex-grow-3">
<div class="field">
@@ -44,7 +48,9 @@ export function InstanceCreatedSuccessfully({
</div>
<div class="field is-horizontal">
<div class="field-label is-normal">
- <label class="label">Business Name</label>
+ <label class="label">
+ <i18n.Translate>Business Name</i18n.Translate>
+ </label>
</div>
<div class="field-body is-flex-grow-3">
<div class="field">
@@ -56,7 +62,9 @@ export function InstanceCreatedSuccessfully({
</div>
<div class="field is-horizontal">
<div class="field-label is-normal">
- <label class="label">Access token</label>
+ <label class="label">
+ <i18n.Translate>Access token</i18n.Translate>
+ </label>
</div>
<div class="field-body is-flex-grow-3">
<div class="field">
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
index b00cfbe7d..abf635662 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
@@ -18,9 +18,7 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
import { TalerMerchantApi } from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { NotificationCard } from "../../../components/menu/index.js";
@@ -38,8 +36,7 @@ export type Entity = TalerMerchantApi.InstanceConfigurationMessage;
export default function Create({ onBack, onConfirm, forceId }: Props): VNode {
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- const { lib } = useSessionContext();
- const { state, logIn } = useSessionContext();
+ const { lib, state, logIn } = useSessionContext();
return (
<Fragment>
@@ -48,12 +45,18 @@ export default function Create({ onBack, onConfirm, forceId }: Props): VNode {
<CreatePage
onBack={onBack}
forceId={forceId}
- onCreate={async (
- d: TalerMerchantApi.InstanceConfigurationMessage,
- ) => {
+ onCreate={async (d: TalerMerchantApi.InstanceConfigurationMessage) => {
if (state.status !== "loggedIn") return;
try {
- await lib.instance.createInstance(state.token, d);
+ const resp = await lib.instance.createInstance(state.token, d);
+ if (resp.type === "fail") {
+ setNotif({
+ message: i18n.str`Failed to create instance`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ return;
+ }
if (d.auth.token) {
//if auth has been updated, request a new access token
const result = await lib.authenticate.createAccessTokenBearer(
@@ -72,16 +75,12 @@ export default function Create({ onBack, onConfirm, forceId }: Props): VNode {
}
}
onConfirm();
- } catch (ex) {
- if (ex instanceof Error) {
- setNotif({
- message: i18n.str`Failed to create instance`,
- type: "ERROR",
- description: ex.message,
- });
- } else {
- console.error(ex);
- }
+ } catch (error) {
+ setNotif({
+ message: i18n.str`Failed to create instance`,
+ type: "ERROR",
+ description: error instanceof Error ? error.message : String(error),
+ });
}
}}
/>
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx b/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
index cff3c5a02..61dbea9de 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
@@ -20,9 +20,7 @@
*/
import { TalerMerchantApi } from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { VNode, h } from "preact";
import { StateUpdater, useEffect, useState } from "preact/hooks";
import { useSessionContext } from "../../../context/session.js";
@@ -97,7 +95,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add new instance`}
+ data-tooltip={i18n.str`Add new instance`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -151,8 +149,7 @@ function Table({
onPurge,
}: TableProps): VNode {
const { i18n } = useTranslationContext();
- const { lib } = useSessionContext();
- const { impersonate } = useSessionContext();
+ const { lib, impersonate } = useSessionContext();
return (
<div class="table-container">
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -262,7 +259,7 @@ function EmptyTable(): VNode {
</p>
<p>
<i18n.Translate>
- There is no instances yet, add more pressing the + sign
+ There are no instances yet, add more pressing the + sign
</i18n.Translate>
</p>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx b/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
index 940d14334..969a037a9 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
@@ -51,8 +51,8 @@ export function View({
const showingInstances = showIsDeleted
? instances.filter((i) => i.deleted)
: showIsActive
- ? instances.filter((i) => !i.deleted)
- : instances;
+ ? instances.filter((i) => !i.deleted)
+ : instances;
return (
<section class="section is-main-section">
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
index 5b492e45c..9a274ce35 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
@@ -19,10 +19,13 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../components/ErrorLoadingMerchant.js";
@@ -41,31 +44,29 @@ interface Props {
instances: TalerMerchantApi.Instance[];
}
-export default function Instances({
- onCreate,
- onUpdate,
-}: Props): VNode {
+export default function Instances({ onCreate, onUpdate }: Props): VNode {
const result = useBackendInstances();
- const [deleting, setDeleting] =
- useState<TalerMerchantApi.Instance | null>(null);
- const [purging, setPurging] =
- useState<TalerMerchantApi.Instance | null>(null);
+ const [deleting, setDeleting] = useState<TalerMerchantApi.Instance | null>(
+ null,
+ );
+ const [purging, setPurging] = useState<TalerMerchantApi.Instance | null>(
+ null,
+ );
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
- if (!result) return <Loading />
+ if (!result) return <Loading />;
if (result instanceof TalerError) {
- return <ErrorLoadingMerchant error={result} />
+ return <ErrorLoadingMerchant error={result} />;
}
if (result.type === "fail") {
- switch(result.case) {
+ switch (result.case) {
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
- assertUnreachable(result.case)
+ assertUnreachable(result.case);
}
}
}
@@ -90,12 +91,22 @@ export default function Instances({
return;
}
try {
- await lib.instance.deleteInstance(state.token, deleting.id);
- // pushNotification({message: 'delete_success', type: 'SUCCESS' })
- setNotif({
- message: i18n.str`Instance "${deleting.name}" (ID: ${deleting.id}) has been deleted`,
- type: "SUCCESS",
- });
+ const resp = await lib.instance.deleteInstance(
+ state.token,
+ deleting.id,
+ );
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Instance "${deleting.name}" (ID: ${deleting.id}) has been deleted`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Failed to delete instance`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
} catch (error) {
setNotif({
message: i18n.str`Failed to delete instance`,
@@ -117,11 +128,25 @@ export default function Instances({
return;
}
try {
- await lib.instance.deleteInstance(state.token, purging.id, { purge: true });
- setNotif({
- message: i18n.str`Instance '${purging.name}' (ID: ${purging.id}) has been disabled`,
- type: "SUCCESS",
- });
+ const resp = await lib.instance.deleteInstance(
+ state.token,
+ purging.id,
+ {
+ purge: true,
+ },
+ );
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Instance '${purging.name}' (ID: ${purging.id}) has been purged`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Failed to purge instance`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
} catch (error) {
setNotif({
message: i18n.str`Failed to purge instance`,
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
index 61f62e631..20873cf47 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
@@ -21,35 +21,38 @@
import {
HttpStatusCode,
- PaytoString,
PaytoUri,
TalerError,
TalerMerchantApi,
+ TalerRevenueApi,
TranslatedString,
assertUnreachable,
parsePaytoUri,
} from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
import {
FormErrors,
FormProvider,
+ TalerForm,
} from "../../../../components/form/FormProvider.js";
import { Input } from "../../../../components/form/Input.js";
import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js";
import { InputSelector } from "../../../../components/form/InputSelector.js";
+import { InputToggle } from "../../../../components/form/InputToggle.js";
import {
CompareAccountsModal,
ImportingAccountModal,
} from "../../../../components/modal/index.js";
import { undefinedIfEmpty } from "../../../../utils/table.js";
import { safeConvertURL } from "../update/UpdatePage.js";
-import { testRevenueAPI } from "./index.js";
-import { InputToggle } from "../../../../components/form/InputToggle.js";
+import { testRevenueAPI, TestRevenueErrorType } from "./index.js";
-type Entity = TalerMerchantApi.AccountAddDetails & { verified?: boolean };
+type Entity = TalerMerchantApi.AccountAddDetails & {
+ verified?: boolean;
+} & TalerForm;
interface Props {
onCreate: (d: TalerMerchantApi.AccountAddDetails) => Promise<void>;
@@ -72,39 +75,39 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
const [testError, setTestError] = useState<TranslatedString | undefined>(
undefined,
);
- const errors: FormErrors<Entity> = {
- payto_uri: !state.payto_uri ? i18n.str`required` : undefined,
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ payto_uri: !state.payto_uri ? i18n.str`Required` : undefined,
- credit_facade_credentials: !state.credit_facade_credentials
- ? undefined
- : undefinedIfEmpty({
- username:
- state.credit_facade_credentials.type === "basic" &&
- !state.credit_facade_credentials.username
- ? i18n.str`required`
- : undefined,
- password:
- state.credit_facade_credentials.type === "basic" &&
- !state.credit_facade_credentials.password
- ? i18n.str`required`
- : undefined,
- }),
+ credit_facade_credentials: undefinedIfEmpty(
+ !state.credit_facade_credentials
+ ? undefined
+ : {
+ username:
+ state.credit_facade_credentials.type === "basic" &&
+ !state.credit_facade_credentials.username
+ ? i18n.str`Required`
+ : undefined,
+ password:
+ state.credit_facade_credentials.type === "basic" &&
+ !state.credit_facade_credentials.password
+ ? i18n.str`Required`
+ : undefined,
+ },
+ ) as any,
credit_facade_url: !state.credit_facade_url
? undefined
: !facadeURL
? i18n.str`Invalid url`
: !facadeURL.href.endsWith("/")
- ? i18n.str`URL should end with a '/'`
+ ? i18n.str`URL must end with a '/'`
: facadeURL.searchParams.size > 0
- ? i18n.str`URL should not contain params`
+ ? i18n.str`URL must not contain params`
: facadeURL.hash
- ? i18n.str`URL should not hash param`
+ ? i18n.str`URL must not hash param`
: undefined,
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as Record<string, unknown>)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submitForm = () => {
if (hasErrors) return Promise.reject();
@@ -170,7 +173,17 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
}
case HttpStatusCode.NotFound: {
setTestError(
- i18n.str`The endpoint doesn't seems to be a Taler Revenue API.`,
+ i18n.str`The endpoint does not seem to be a Taler Revenue API.`,
+ );
+ setState({
+ ...state,
+ verified: undefined,
+ });
+ return;
+ }
+ case TestRevenueErrorType.CANT_VALIDATE: {
+ setTestError(
+ i18n.str`The request was made correctly, but the bank's server did not respond with the appropriate value for 'credit_account', so we cannot confirm that it is the same bank account.`,
);
setState({
...state,
@@ -223,7 +236,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
<Input<Entity>
name="credit_facade_url"
label={i18n.str`Endpoint URL`}
- help="https://bank.demo.taler.net/accounts/_username_/taler-revenue/"
+ help="https://bank.demo.taler.net/accounts/${USERNAME}/taler-revenue/"
expand
tooltip={i18n.str`From where the merchant can download information about incoming wire transfers to this account`}
/>
@@ -273,7 +286,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
data-tooltip={i18n.str`Compare info from server with account form`}
disabled={!state.credit_facade_url}
onClick={async () => {
- const result = await testAccountInfo();
+ await testAccountInfo();
}}
>
<i18n.Translate>Test</i18n.Translate>
@@ -302,7 +315,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
index 6994c579c..6c7fbaad2 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
@@ -20,6 +20,7 @@
*/
import {
+ AccessToken,
FacadeCredentials,
HttpStatusCode,
OperationFail,
@@ -28,7 +29,6 @@ import {
TalerError,
TalerMerchantApi,
TalerRevenueHttpClient,
- assertUnreachable,
opFixedSuccess,
} from "@gnu-taler/taler-util";
import {
@@ -41,6 +41,7 @@ import { NotificationCard } from "../../../../components/menu/index.js";
import { useSessionContext } from "../../../../context/session.js";
import { Notification } from "../../../../utils/types.js";
import { CreatePage } from "./CreatePage.js";
+import { BasicOrTokenAuth } from "@gnu-taler/taler-util";
export type Entity = TalerMerchantApi.AccountAddDetails;
interface Props {
@@ -49,10 +50,9 @@ interface Props {
}
export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
- const { lib: api } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const [tested, setTested] = useState(false);
+ // const [tested, setTested] = useState(false);
const { i18n } = useTranslationContext();
return (
@@ -61,14 +61,14 @@ export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
<CreatePage
onBack={onBack}
onCreate={async (request: Entity) => {
- return api.instance
+ return lib.instance
.addBankAccount(state.token, request)
- .then((created) => {
- if (created.type === "fail") {
+ .then((resp) => {
+ if (resp.type === "fail") {
setNotif({
- message: i18n.str`could not create account`,
+ message: i18n.str`Could not create account`,
type: "ERROR",
- description: created.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
@@ -76,9 +76,10 @@ export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
})
.catch((error) => {
setNotif({
- message: i18n.str`could not create account`,
+ message: i18n.str`Could not create account`,
type: "ERROR",
- description: error.message,
+ description:
+ error instanceof Error ? error.message : String(error),
});
});
}}
@@ -89,6 +90,7 @@ export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
export enum TestRevenueErrorType {
ANOTHER_ACCOUNT,
+ CANT_VALIDATE,
}
export async function testRevenueAPI(
@@ -98,6 +100,7 @@ export async function testRevenueAPI(
| OperationOk<PaytoString>
| OperationFail<HttpStatusCode.NotFound>
| OperationFail<HttpStatusCode.Unauthorized>
+ | OperationFail<TestRevenueErrorType.CANT_VALIDATE>
| OperationFail<HttpStatusCode.BadRequest>
| TalerError
> {
@@ -105,17 +108,23 @@ export async function testRevenueAPI(
revenueAPI.href,
new BrowserFetchHttpLib(),
);
- const auth =
+ const auth: BasicOrTokenAuth | undefined =
creds === undefined
? undefined
: creds.type === "none"
? undefined
: creds.type === "basic"
? {
+ type: "basic",
username: creds.username,
password: creds.password,
}
- : undefined;
+ : creds.type === "bearer"
+ ? {
+ type: "bearer",
+ token: creds.token as AccessToken,
+ }
+ : undefined;
try {
const config = await api.getConfig(auth);
@@ -129,6 +138,13 @@ export async function testRevenueAPI(
return resp;
}
+ if (!resp.body.credit_account) {
+ return {
+ type: "fail",
+ case: TestRevenueErrorType.CANT_VALIDATE,
+ detail: undefined,
+ };
+ }
return opFixedSuccess(resp.body.credit_account as PaytoString);
} catch (err) {
if (err instanceof TalerError) {
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx
deleted file mode 100644
index 7e0b89f39..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/ListPage.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
-import { h, VNode } from "preact";
-import { CardTable } from "./Table.js";
-
-export interface Props {
- devices: TalerMerchantApi.BankAccountEntry[];
- // onLoadMoreBefore?: () => void;
- // onLoadMoreAfter?: () => void;
- onCreate: () => void;
- onDelete: (e: TalerMerchantApi.BankAccountEntry) => void;
- onSelect: (e: TalerMerchantApi.BankAccountEntry) => void;
-}
-
-export function ListPage({
- devices,
- onCreate,
- onDelete,
- onSelect,
- // onLoadMoreBefore,
- // onLoadMoreAfter,
-}: Props): VNode {
- return (
- <section class="section is-main-section">
- <CardTable
- accounts={devices.map((o) => ({
- ...o,
- id: String(o.h_wire),
- }))}
- onCreate={onCreate}
- onDelete={onDelete}
- onSelect={onSelect}
- // onLoadMoreBefore={onLoadMoreBefore}
- // hasMoreBefore={!onLoadMoreBefore}
- // onLoadMoreAfter={onLoadMoreAfter}
- // hasMoreAfter={!onLoadMoreAfter}
- />
- </section>
- );
-}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx
index 0e813f4d2..1cf3483df 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx
@@ -64,7 +64,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add new accounts`}
+ data-tooltip={i18n.str`Add new account`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -126,14 +126,14 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
const bitcoinAccounts = accountsByType["bitcoin"];
const talerbankAccounts = accountsByType["x-taler-bank"];
const ibanAccounts = accountsByType["iban"];
- const unkownAccounts = accountsByType["unknown"];
+ const unknownAccounts = accountsByType["unknown"];
return (
<Fragment>
{bitcoinAccounts.length > 0 && (
<div class="table-container">
<p class="card-header-title">
- <i18n.Translate>Bitcoin type accounts</i18n.Translate>
+ <i18n.Translate>Wire method: Bitcoin</i18n.Translate>
</p>
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
<thead>
@@ -142,10 +142,10 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
<i18n.Translate>Address</i18n.Translate>
</th>
<th>
- <i18n.Translate>Sewgit 1</i18n.Translate>
+ <i18n.Translate>SegWit 1</i18n.Translate>
</th>
<th>
- <i18n.Translate>Sewgit 2</i18n.Translate>
+ <i18n.Translate>SegWit 2</i18n.Translate>
</th>
<th />
</tr>
@@ -177,10 +177,10 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
<div class="buttons is-right">
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected accounts from the database`}
+ data-tooltip={i18n.str`Delete selected accounts from the database`}
onClick={() => onDelete(acc)}
>
- Delete
+ <i18n.Translate>Delete</i18n.Translate>
</button>
</div>
</td>
@@ -195,7 +195,7 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
{talerbankAccounts.length > 0 && (
<div class="table-container">
<p class="card-header-title">
- <i18n.Translate>Taler type accounts</i18n.Translate>
+ <i18n.Translate>Wire method: x-taler-bank</i18n.Translate>
</p>
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
<thead>
@@ -230,10 +230,10 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
<div class="buttons is-right">
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected accounts from the database`}
+ data-tooltip={i18n.str`Delete selected accounts from the database`}
onClick={() => onDelete(acc)}
>
- Delete
+ <i18n.Translate>Delete</i18n.Translate>
</button>
</div>
</td>
@@ -248,7 +248,7 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
{ibanAccounts.length > 0 && (
<div class="table-container">
<p class="card-header-title">
- <i18n.Translate>IBAN type accounts</i18n.Translate>
+ <i18n.Translate>Wire method: IBAN</i18n.Translate>
</p>
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
<thead>
@@ -283,10 +283,10 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
<div class="buttons is-right">
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected accounts from the database`}
+ data-tooltip={i18n.str`Delete selected accounts from the database`}
onClick={() => onDelete(acc)}
>
- Delete
+ <i18n.Translate>Delete</i18n.Translate>
</button>
</div>
</td>
@@ -298,10 +298,10 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
</div>
)}
- {unkownAccounts.length > 0 && (
+ {unknownAccounts.length > 0 && (
<div class="table-container">
<p class="card-header-title">
- <i18n.Translate>Other type accounts</i18n.Translate>
+ <i18n.Translate>Other accounts</i18n.Translate>
</p>
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
<thead>
@@ -316,7 +316,7 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
</tr>
</thead>
<tbody>
- {unkownAccounts.map(({ parsed, acc }, idx) => {
+ {unknownAccounts.map(({ parsed, acc }, idx) => {
const ac = parsed as PaytoUriUnknown;
return (
<tr key={idx}>
@@ -336,10 +336,10 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
<div class="buttons is-right">
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected accounts from the database`}
+ data-tooltip={i18n.str`Delete selected accounts from the database`}
onClick={() => onDelete(acc)}
>
- Delete
+ <i18n.Translate>Delete</i18n.Translate>
</button>
</div>
</td>
@@ -365,7 +365,7 @@ function EmptyTable(): VNode {
</p>
<p>
<i18n.Translate>
- There is no accounts yet, add more pressing the + sign
+ There are no accounts yet, add more pressing the + sign
</i18n.Translate>
</p>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
index 9d09473bc..63ac62b08 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
@@ -36,7 +36,7 @@ import { useInstanceBankAccounts } from "../../../../hooks/bank.js";
import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
-import { ListPage } from "./ListPage.js";
+import { CardTable } from "./Table.js";
interface Props {
onCreate: () => void;
@@ -46,8 +46,7 @@ interface Props {
export default function ListOtpDevices({ onCreate, onSelect }: Props): VNode {
const { i18n } = useTranslationContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { lib: api } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const result = useInstanceBankAccounts();
if (!result) return <Loading />;
@@ -80,34 +79,44 @@ export default function ListOtpDevices({ onCreate, onSelect }: Props): VNode {
}}
/>
)}
- <ListPage
- devices={result.body.accounts}
- // onLoadMoreBefore={
- // result.isFirstPage ? undefined: result.loadFirst
- // }
- // onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}
- onCreate={onCreate}
- onSelect={(e) => {
- onSelect(e.h_wire);
- }}
- onDelete={(e: TalerMerchantApi.BankAccountEntry) => {
- return api.instance
- .deleteBankAccount(state.token, e.h_wire)
- .then(() =>
- setNotif({
- message: i18n.str`bank account delete successfully`,
- type: "SUCCESS",
- }),
- )
- .catch((error) =>
- setNotif({
- message: i18n.str`could not delete the bank account`,
- type: "ERROR",
- description: error.message,
- }),
- );
- }}
- />
+ <section class="section is-main-section">
+ <CardTable
+ accounts={result.body.accounts.map((o) => ({
+ ...o,
+ id: String(o.h_wire),
+ }))}
+ onCreate={onCreate}
+ onSelect={(e) => {
+ onSelect(e.h_wire);
+ }}
+ onDelete={async (e: TalerMerchantApi.BankAccountEntry) => {
+ return lib.instance
+ .deleteBankAccount(state.token, e.h_wire)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`The bank account has been successfully deleted.`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Could not delete the bank account`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
+ .catch((error) =>
+ setNotif({
+ message: i18n.str`Could not delete the bank account`,
+ type: "ERROR",
+ description:
+ error instanceof Error ? error.message : String(error),
+ }),
+ );
+ }}
+ />
+ </section>
</Fragment>
);
}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx
index 73fe43026..2c74fac1b 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx
@@ -42,7 +42,7 @@ import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js";
import { InputSelector } from "../../../../components/form/InputSelector.js";
import { WithId } from "../../../../declaration.js";
import { undefinedIfEmpty } from "../../../../utils/table.js";
-import { testRevenueAPI } from "../create/index.js";
+import { testRevenueAPI, TestRevenueErrorType } from "../create/index.js";
import { InputToggle } from "../../../../components/form/InputToggle.js";
import {
CompareAccountsModal,
@@ -54,7 +54,7 @@ type FormType = TalerMerchantApi.AccountPatchDetails & {
verified: boolean;
payto_uri?: PaytoString;
};
-const accountAuthType = ["unedit", "none", "basic"];
+const accountAuthType = ["unedit", "none", "basic", "bearer"];
interface Props {
onUpdate: (d: TalerMerchantApi.AccountPatchDetails) => Promise<void>;
onReplace: (
@@ -77,7 +77,7 @@ export function UpdatePage({
payto_uri: account.payto_uri,
credit_facade_url: account.credit_facade_url,
credit_facade_credentials: {
- // @ts-ignore
+ // @ts-expect-error unofficial unedited value
type: "unedit",
},
});
@@ -95,48 +95,53 @@ export function UpdatePage({
const facadeURL = safeConvertURL(state.credit_facade_url);
- const errors: FormErrors<FormType> = {
- payto_uri: !state.payto_uri ? i18n.str`required` : undefined,
+ const errors = undefinedIfEmpty<FormErrors<FormType>>({
+ payto_uri: !state.payto_uri ? i18n.str`Required` : undefined,
credit_facade_url: !state.credit_facade_url
? undefined
: !facadeURL
? i18n.str`Invalid url`
: !facadeURL.href.endsWith("/")
- ? i18n.str`URL should end with a '/'`
+ ? i18n.str`URL must end with a '/'`
: facadeURL.searchParams.size > 0
- ? i18n.str`URL should not contain params`
+ ? i18n.str`URL must not contain params`
: facadeURL.hash
- ? i18n.str`URL should not hash param`
+ ? i18n.str`URL must not hash param`
: undefined,
credit_facade_credentials: !state.credit_facade_credentials
? undefined
: undefinedIfEmpty({
type:
replacingAccountId &&
- // @ts-ignore
+ // @ts-expect-error unedit is not in facade creds
state.credit_facade_credentials?.type === "unedit"
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined,
username:
state.credit_facade_credentials?.type !== "basic"
? undefined
: !state.credit_facade_credentials.username
- ? i18n.str`required`
+ ? i18n.str`Required`
+ : undefined,
+
+ token:
+ state.credit_facade_credentials?.type !== "bearer"
+ ? undefined
+ : !state.credit_facade_credentials.token
+ ? i18n.str`Required`
: undefined,
password:
state.credit_facade_credentials?.type !== "basic"
? undefined
: !state.credit_facade_credentials.password
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined,
- }),
- };
+ }) as any,
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submitForm = () => {
if (hasErrors) return Promise.reject();
@@ -150,7 +155,7 @@ export function UpdatePage({
credit_facade_url == undefined ||
state.credit_facade_credentials === undefined
? undefined
- : // @ts-ignore
+ : // @ts-expect-error unedit is not in facade creds
state.credit_facade_credentials.type === "unedit"
? undefined
: state.credit_facade_credentials.type === "basic"
@@ -159,19 +164,22 @@ export function UpdatePage({
password: state.credit_facade_credentials.password,
username: state.credit_facade_credentials.username,
}
- : {
- type: "none",
- };
+ : state.credit_facade_credentials.type === "bearer"
+ ? {
+ type: "bearer",
+ token: state.credit_facade_credentials.token,
+ }
+ : {
+ type: "none",
+ };
if (replacingAccountId) {
- console.log("======== REPLACE");
return onReplace(account, {
payto_uri: state.payto_uri!,
credit_facade_credentials,
credit_facade_url,
});
} else {
- console.log("======== UPDATE");
return onUpdate({ credit_facade_credentials, credit_facade_url });
}
};
@@ -213,7 +221,17 @@ export function UpdatePage({
}
case HttpStatusCode.NotFound: {
setTestError(
- i18n.str`The endpoint doesn't seems to be a Taler Revenue API.`,
+ i18n.str`The endpoint does not seem to be a Taler Revenue API.`,
+ );
+ setState({
+ ...state,
+ verified: undefined,
+ });
+ return;
+ }
+ case TestRevenueErrorType.CANT_VALIDATE: {
+ setTestError(
+ i18n.str`The request was made correctly, but the bank's server did not respond with the appropriate value for 'credit_account', so we cannot confirm that it is the same bank account.`,
);
setState({
...state,
@@ -283,7 +301,7 @@ export function UpdatePage({
<Input<Entity>
name="credit_facade_url"
label={i18n.str`Endpoint URL`}
- help="https://bank.demo.taler.net/accounts/_username_/taler-revenue/"
+ help="https://bank.demo.taler.net/accounts/${USERNAME}/taler-revenue/"
expand
tooltip={i18n.str`From where the merchant can download information about incoming wire transfers to this account`}
/>
@@ -293,9 +311,10 @@ export function UpdatePage({
tooltip={i18n.str`Choose the authentication type for the account info URL`}
values={accountAuthType}
toStr={(str) => {
- if (str === "none") return "Without authentication";
- if (str === "basic") return "With authentication";
- return "Do not change";
+ if (str === "none") return i18n.str`Without authentication`;
+ if (str === "basic") return i18n.str`With password`;
+ if (str === "bearer") return i18n.str`With token`;
+ return i18n.str`Do not change`;
}}
/>
{state.credit_facade_credentials?.type === "basic" ? (
@@ -313,6 +332,16 @@ export function UpdatePage({
/>
</Fragment>
) : undefined}
+ {state.credit_facade_credentials?.type === "bearer" ? (
+ <Fragment>
+ <Input
+ name="credit_facade_credentials.token"
+ label={i18n.str`Token`}
+ inputType="password"
+ tooltip={i18n.str`Access token to access the account information.`}
+ />
+ </Fragment>
+ ) : undefined}
<InputToggle<FormType>
label={i18n.str`Match`}
tooltip={i18n.str`Check where the information match against the server info.`}
@@ -334,7 +363,7 @@ export function UpdatePage({
data-tooltip={i18n.str`Compare info from server with account form`}
disabled={!state.credit_facade_url}
onClick={async () => {
- const result = await testAccountInfo();
+ await testAccountInfo();
}}
>
<i18n.Translate>Test</i18n.Translate>
@@ -354,7 +383,7 @@ export function UpdatePage({
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
index 60dad7257..fc031625a 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
@@ -51,8 +51,7 @@ export default function UpdateValidator({
onConfirm,
onBack,
}: Props): VNode {
- const { lib: api } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const result = useBankAccountDetails(bid);
const [notif, setNotif] = useState<Notification | undefined>(undefined);
@@ -83,14 +82,14 @@ export default function UpdateValidator({
account={{ ...result.body, id: bid }}
onBack={onBack}
onUpdate={async (request) => {
- return api.instance
+ return lib.instance
.updateBankAccount(state.token, bid, request)
- .then((updated) => {
- if (updated.type === "fail") {
+ .then((resp) => {
+ if (resp.type === "fail") {
setNotif({
- message: i18n.str`could not update account`,
+ message: i18n.str`Could not update account`,
type: "ERROR",
- description: updated.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
@@ -98,52 +97,52 @@ export default function UpdateValidator({
})
.catch((error) => {
setNotif({
- message: i18n.str`could not update account`,
+ message: i18n.str`Could not update account`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
onReplace={async (prev, next) => {
try {
- const created = await api.instance.addBankAccount(
+ const resp = await lib.instance.addBankAccount(
state.token,
next,
);
- if (created.type === "fail") {
+ if (resp.type === "fail") {
setNotif({
- message: i18n.str`could not create account`,
+ message: i18n.str`Could not create account`,
type: "ERROR",
- description: created.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
- } catch (error: any) {
+ } catch (error) {
setNotif({
- message: i18n.str`could not create account`,
+ message: i18n.str`Could not create account`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
return;
}
try {
- const deleted = await api.instance.deleteBankAccount(
+ const resp = await lib.instance.deleteBankAccount(
state.token,
prev.h_wire,
);
- if (deleted.type === "fail") {
+ if (resp.type === "fail") {
setNotif({
- message: i18n.str`could not delete account`,
+ message: i18n.str`Could not delete account`,
type: "ERROR",
- description: deleted.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
- } catch (error: any) {
+ } catch (error) {
setNotif({
- message: i18n.str`could not delete account`,
+ message: i18n.str`Could not delete account`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
return;
}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/List.stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/Create.stories.tsx
index 18e762642..36b31ebe8 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/List.stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/Create.stories.tsx
@@ -19,10 +19,10 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { FunctionalComponent, h } from "preact";
-import { ListPage as TestedComponent } from "./ListPage.js";
+import { h, VNode, FunctionalComponent } from "preact";
+import { CreatePage as TestedComponent } from "./CreatePage.js";
export default {
- title: "Pages/Accounts/List",
+ title: "Pages/OtpDevices/Create",
component: TestedComponent,
};
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/categories/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/CreatePage.tsx
new file mode 100644
index 000000000..aa44089be
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/CreatePage.tsx
@@ -0,0 +1,103 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { VNode, h } from "preact";
+import { useState } from "preact/hooks";
+import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
+import {
+ FormErrors,
+ FormProvider,
+} from "../../../../components/form/FormProvider.js";
+import { Input } from "../../../../components/form/Input.js";
+import { undefinedIfEmpty } from "../../../../utils/table.js";
+
+type Entity = TalerMerchantApi.CategoryCreateRequest;
+
+interface Props {
+ onCreate: (d: Entity) => Promise<void>;
+ onBack?: () => void;
+}
+
+export function CreatePage({ onCreate, onBack }: Props): VNode {
+ const { i18n } = useTranslationContext();
+
+ const [state, setState] = useState<Partial<Entity>>({ name_i18n: {} });
+
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ name: !state.name
+ ? i18n.str`Required`
+ : !/[a-zA-Z0-9]*/.test(state.name)
+ ? i18n.str`Invalid. Please insert only characters and numbers`
+ : undefined,
+ });
+
+ const hasErrors = errors !== undefined;
+
+ const submitForm = () => {
+ if (hasErrors) return Promise.reject();
+ return onCreate(state as Entity);
+ };
+
+ return (
+ <div>
+ <section class="section is-main-section">
+ <div class="columns">
+ <div class="column" />
+ <div class="column is-four-fifths">
+ <FormProvider
+ object={state}
+ valueHandler={setState}
+ errors={errors}
+ >
+ <Input<Entity>
+ name="name"
+ label={i18n.str`Name`}
+ tooltip={i18n.str`Category name`}
+ />{" "}
+ </FormProvider>
+
+ <div class="buttons is-right mt-5">
+ {onBack && (
+ <button class="button" onClick={onBack}>
+ <i18n.Translate>Cancel</i18n.Translate>
+ </button>
+ )}
+ <AsyncButton
+ disabled={hasErrors}
+ data-tooltip={
+ hasErrors
+ ? i18n.str`Need to complete marked fields`
+ : i18n.str`Confirm operation`
+ }
+ onClick={submitForm}
+ >
+ <i18n.Translate>Confirm</i18n.Translate>
+ </AsyncButton>
+ </div>
+ </div>
+ <div class="column" />
+ </div>
+ </section>
+ </div>
+ );
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx
new file mode 100644
index 000000000..0a8c264f1
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx
@@ -0,0 +1,77 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Fragment, VNode, h } from "preact";
+import { useState } from "preact/hooks";
+import { NotificationCard } from "../../../../components/menu/index.js";
+import { useSessionContext } from "../../../../context/session.js";
+import { Notification } from "../../../../utils/types.js";
+import { CreatePage } from "./CreatePage.js";
+
+type Entity = TalerMerchantApi.CategoryCreateRequest;
+interface Props {
+ onBack?: () => void;
+ onConfirm: () => void;
+}
+
+export default function CreateCategory({ onConfirm, onBack }: Props): VNode {
+ const { state, lib } = useSessionContext();
+ const [notif, setNotif] = useState<Notification | undefined>(undefined);
+ const { i18n } = useTranslationContext();
+
+ return (
+ <>
+ <NotificationCard notification={notif} />
+ <CreatePage
+ onBack={onBack}
+ onCreate={async (request: Entity) => {
+ return lib.instance
+ .addCategory(state.token, request)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Category added successfully`,
+ type: "SUCCESS",
+ });
+ onConfirm()
+ } else {
+ setNotif({
+ message: i18n.str`Could not add category`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
+ .catch((error) => {
+ setNotif({
+ message: i18n.str`Could not add category`,
+ type: "ERROR",
+ description:
+ error instanceof Error ? error.message : String(error),
+ });
+ });
+ }}
+ />
+ </>
+ );
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/categories/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/list/Table.tsx
new file mode 100644
index 000000000..9b2bae1f3
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/list/Table.tsx
@@ -0,0 +1,205 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { h, VNode } from "preact";
+import { StateUpdater, useState } from "preact/hooks";
+
+type Entity = TalerMerchantApi.CategoryListEntry;
+
+interface Props {
+ devices: Entity[];
+ onDelete: (e: Entity) => void;
+ onSelect: (e: Entity) => void;
+ onCreate: () => void;
+ onLoadMoreBefore?: () => void;
+ onLoadMoreAfter?: () => void;
+}
+
+export function CardTable({
+ devices,
+ onCreate,
+ onDelete,
+ onSelect,
+ onLoadMoreAfter,
+ onLoadMoreBefore,
+}: Props): VNode {
+ const [rowSelection, rowSelectionHandler] = useState<string[]>([]);
+
+ const { i18n } = useTranslationContext();
+
+ return (
+ <div class="card has-table">
+ <header class="card-header">
+ <p class="card-header-title">
+ <span class="icon">
+ <i class="mdi mdi-label" />
+ </span>
+ <i18n.Translate>Categories</i18n.Translate>
+ </p>
+ <div class="card-header-icon" aria-label="more options">
+ <span
+ class="has-tooltip-left"
+ data-tooltip={i18n.str`Add new devices`}
+ >
+ <button class="button is-info" type="button" onClick={onCreate}>
+ <span class="icon is-small">
+ <i class="mdi mdi-plus mdi-36px" />
+ </span>
+ </button>
+ </span>
+ </div>
+ </header>
+ <div class="card-content">
+ <div class="b-table has-pagination">
+ <div class="table-wrapper has-mobile-cards">
+ {devices.length > 0 ? (
+ <Table
+ instances={devices}
+ onDelete={onDelete}
+ onSelect={onSelect}
+ rowSelection={rowSelection}
+ rowSelectionHandler={rowSelectionHandler}
+ onLoadMoreAfter={onLoadMoreAfter}
+ onLoadMoreBefore={onLoadMoreBefore}
+ />
+ ) : (
+ <EmptyTable />
+ )}
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+}
+interface TableProps {
+ rowSelection: string[];
+ instances: Entity[];
+ onDelete: (e: Entity) => void;
+ onSelect: (e: Entity) => void;
+ rowSelectionHandler: StateUpdater<string[]>;
+ onLoadMoreBefore?: () => void;
+ onLoadMoreAfter?: () => void;
+}
+
+function Table({
+ instances,
+ onLoadMoreAfter,
+ onDelete,
+ onSelect,
+ onLoadMoreBefore,
+}: TableProps): VNode {
+ const { i18n } = useTranslationContext();
+ return (
+ <div class="table-container">
+ {onLoadMoreBefore && (
+ <button
+ class="button is-fullwidth"
+ data-tooltip={i18n.str`Load more devices before the first one`}
+ onClick={onLoadMoreBefore}
+ >
+ <i18n.Translate>Load first page</i18n.Translate>
+ </button>
+ )}
+ <table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
+ <thead>
+ <tr>
+ <th>
+ <i18n.Translate>ID</i18n.Translate>
+ </th>
+ <th>
+ <i18n.Translate>Name</i18n.Translate>
+ </th>
+ <th>
+ <i18n.Translate>Total products</i18n.Translate>
+ </th>
+ <th />
+ </tr>
+ </thead>
+ <tbody>
+ {instances.map((i) => {
+ return (
+ <tr key={i.category_id}>
+ <td
+ onClick={(): void => onSelect(i)}
+ style={{ cursor: "pointer" }}
+ >
+ {i.category_id}
+ </td>
+ <td
+ onClick={(): void => onSelect(i)}
+ style={{ cursor: "pointer" }}
+ >
+ {i.name}
+ </td>
+ <td
+ onClick={(): void => onSelect(i)}
+ style={{ cursor: "pointer" }}
+ >
+ {i.product_count}
+ </td>
+ <td class="is-actions-cell right-sticky">
+ <div class="buttons is-right">
+ <button
+ class="button is-danger is-small has-tooltip-left"
+ data-tooltip={i18n.str`Delete selected category from the database`}
+ onClick={() => onDelete(i)}
+ >
+ <i18n.Translate>Delete</i18n.Translate>
+ </button>
+ </div>
+ </td>
+ </tr>
+ );
+ })}
+ </tbody>
+ </table>
+ {onLoadMoreAfter && (
+ <button
+ class="button is-fullwidth"
+ data-tooltip={i18n.str`Load more devices after the last one`}
+ onClick={onLoadMoreAfter}
+ >
+ <i18n.Translate>Load next page</i18n.Translate>
+ </button>
+ )}
+ </div>
+ );
+}
+
+function EmptyTable(): VNode {
+ const { i18n } = useTranslationContext();
+ return (
+ <div class="content has-text-grey has-text-centered">
+ <p>
+ <span class="icon is-large">
+ <i class="mdi mdi-magnify mdi-48px" />
+ </span>
+ </p>
+ <p>
+ <i18n.Translate>
+ There are no categories yet, add more pressing the + sign
+ </i18n.Translate>
+ </p>
+ </div>
+ );
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx
new file mode 100644
index 000000000..378fa38d4
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx
@@ -0,0 +1,113 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import {
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Fragment, VNode, h } from "preact";
+import { useState } from "preact/hooks";
+import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
+import { Loading } from "../../../../components/exception/loading.js";
+import { NotificationCard } from "../../../../components/menu/index.js";
+import { useSessionContext } from "../../../../context/session.js";
+import { useInstanceCategories } from "../../../../hooks/category.js";
+import { Notification } from "../../../../utils/types.js";
+import { LoginPage } from "../../../login/index.js";
+import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
+import { CardTable } from "./Table.js";
+
+interface Props {
+ onCreate: () => void;
+ onSelect: (id: string) => void;
+}
+
+export default function ListCategories({ onCreate, onSelect }: Props): VNode {
+ // const [position, setPosition] = useState<string | undefined>(undefined);
+ const { i18n } = useTranslationContext();
+ const [notif, setNotif] = useState<Notification | undefined>(undefined);
+ const { state, lib } = useSessionContext();
+ const result = useInstanceCategories();
+
+ if (!result) return <Loading />;
+ if (result instanceof TalerError) {
+ return <ErrorLoadingMerchant error={result} />;
+ }
+ if (result.type === "fail") {
+ switch (result.case) {
+ case HttpStatusCode.NotFound: {
+ return <NotFoundPageOrAdminCreate />;
+ }
+ case HttpStatusCode.Unauthorized: {
+ return <LoginPage />;
+ }
+ default: {
+ assertUnreachable(result);
+ }
+ }
+ }
+
+ return (
+ <Fragment>
+ <NotificationCard notification={notif} />
+
+ <section class="section is-main-section">
+ <CardTable
+ devices={result.body.categories}
+ onLoadMoreBefore={undefined} //result.isFirstPage ? undefined : result.loadFirst}
+ onLoadMoreAfter={undefined} //result.isLastPage ? undefined : result.loadNext}
+ onCreate={onCreate}
+ onSelect={(e) => {
+ onSelect(String(e.category_id));
+ }}
+ onDelete={async (e: TalerMerchantApi.CategoryListEntry) => {
+ return lib.instance
+ .deleteCategory(state.token, String(e.category_id))
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Category delete successfully`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Could not delete the category`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
+ .catch((error) =>
+ setNotif({
+ message: i18n.str`Could not delete the category`,
+ type: "ERROR",
+ description: error instanceof Error ? error.message : String(error),
+ }),
+ );
+ }}
+ />
+ </section>
+ </Fragment>
+ );
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/List.stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/update/Update.stories.tsx
index 707324d40..06ea9d07a 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/List.stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/update/Update.stories.tsx
@@ -19,10 +19,14 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { FunctionalComponent, h } from "preact";
-import { ListPage as TestedComponent } from "./ListPage.js";
+import { h, VNode, FunctionalComponent } from "preact";
+import { UpdatePage as TestedComponent } from "./UpdatePage.js";
export default {
- title: "Pages/Templates/List",
+ title: "Pages/OtpDevices/Update",
component: TestedComponent,
+ argTypes: {
+ onUpdate: { action: "onUpdate" },
+ onBack: { action: "onBack" },
+ },
};
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/categories/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/update/UpdatePage.tsx
new file mode 100644
index 000000000..a08189192
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/update/UpdatePage.tsx
@@ -0,0 +1,162 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import { TalerError, TalerMerchantApi } from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { VNode, h } from "preact";
+import { useEffect, useState } from "preact/hooks";
+import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
+import { FormProvider } from "../../../../components/form/FormProvider.js";
+import { Input } from "../../../../components/form/Input.js";
+import { InputArray } from "../../../../components/form/InputArray.js";
+import { useSessionContext } from "../../../../context/session.js";
+import { WithId } from "../../../../declaration.js";
+import {
+ useInstanceProducts
+} from "../../../../hooks/product.js";
+
+type Entity = TalerMerchantApi.CategoryProductList & WithId;
+
+interface Props {
+ onUpdate: (d: Entity) => Promise<void>;
+ onBack?: () => void;
+ category: Entity;
+}
+export function UpdatePage({ category, onUpdate, onBack }: Props): VNode {
+ const { i18n } = useTranslationContext();
+ const {
+ state: { token },
+ lib,
+ } = useSessionContext();
+ // FIXME: if the product list is big the will bring a lot of info
+ const inventoryResult = useInstanceProducts();
+
+ const inventory =
+ !inventoryResult ||
+ inventoryResult instanceof TalerError ||
+ inventoryResult.type === "fail"
+ ? []
+ : inventoryResult.body;
+
+ const [state, setState] = useState<
+ Partial<Entity & { product_map: { id: string; description: string }[] }>
+ >({
+ ...category,
+ product_map: [],
+ });
+
+ useEffect(() => {
+ if (!category || !category?.products) return;
+ console.log(category.products);
+ const ps = category.products.map((prod) => {
+ return lib.instance
+ .getProductDetails(token, String(prod.product_id))
+ .then((res) => {
+ return res.type === "fail"
+ ? undefined
+ : { id: String(prod.product_id), description: res.body.description };
+ });
+ });
+ Promise.all(ps).then((all) => {
+ const product_map = all.filter(notEmpty);
+ setState({ ...state, product_map });
+ });
+ }, []);
+
+ const submitForm = () => {
+ const pids = state.product_map?.map((p) => {
+ return { product_id: p.id };
+ });
+ state.products = pids;
+ delete state.product_map;
+ return onUpdate(state as Entity);
+ };
+
+ return (
+ <div>
+ <section class="section">
+ <section class="hero is-hero-bar">
+ <div class="hero-body">
+ <div class="level">
+ <div class="level-left">
+ <div class="level-item">
+ <span class="is-size-4">
+ <i18n.Translate>Id:</i18n.Translate>
+ &nbsp;
+ <b>{category.id}</b>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ <hr />
+
+ <section class="section is-main-section">
+ <div class="columns">
+ <div class="column is-four-fifths">
+ <FormProvider object={state} valueHandler={setState}>
+ <Input<Entity>
+ name="name"
+ label={i18n.str`Name`}
+ tooltip={i18n.str`Name of the category`}
+ />
+ <InputArray
+ name="product_map"
+ label={i18n.str`Products`}
+ getSuggestion={async () => {
+ return inventory.map((prod) => {
+ return {
+ description: prod.description,
+ id: prod.id,
+ };
+ });
+ }}
+ help={i18n.str`Search by product description or id`}
+ tooltip={i18n.str`Products that this category will list.`}
+ unique
+ />
+ </FormProvider>
+
+ <div class="buttons is-right mt-5">
+ {onBack && (
+ <button class="button" onClick={onBack}>
+ <i18n.Translate>Cancel</i18n.Translate>
+ </button>
+ )}
+ <AsyncButton
+ disabled={false}
+ data-tooltip={i18n.str`Confirm operation`}
+ onClick={submitForm}
+ >
+ <i18n.Translate>Confirm</i18n.Translate>
+ </AsyncButton>
+ </div>
+ </div>
+ </div>
+ </section>
+ </section>
+ </div>
+ );
+}
+function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {
+ return value !== null && value !== undefined;
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/categories/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/categories/update/index.tsx
new file mode 100644
index 000000000..19352ca3e
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/paths/instance/categories/update/index.tsx
@@ -0,0 +1,114 @@
+/*
+ This file is part of GNU Taler
+ (C) 2021-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+
+import {
+ HttpStatusCode,
+ TalerError,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Fragment, VNode, h } from "preact";
+import { useState } from "preact/hooks";
+import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
+import { Loading } from "../../../../components/exception/loading.js";
+import { NotificationCard } from "../../../../components/menu/index.js";
+import { useSessionContext } from "../../../../context/session.js";
+import { useCategoryDetails } from "../../../../hooks/category.js";
+import { Notification } from "../../../../utils/types.js";
+import { LoginPage } from "../../../login/index.js";
+import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
+import { UpdatePage } from "./UpdatePage.js";
+
+interface Props {
+ onBack?: () => void;
+ onConfirm: () => void;
+ cid: string;
+}
+export default function UpdateCategory({
+ cid,
+ onConfirm,
+ onBack,
+}: Props): VNode {
+ const result = useCategoryDetails(cid);
+ const [notif, setNotif] = useState<Notification | undefined>(undefined);
+ const { state, lib } = useSessionContext();
+
+ const { i18n } = useTranslationContext();
+
+ if (!result) return <Loading />;
+ if (result instanceof TalerError) {
+ return <ErrorLoadingMerchant error={result} />;
+ }
+ if (result.type === "fail") {
+ switch (result.case) {
+ case HttpStatusCode.NotFound: {
+ return <NotFoundPageOrAdminCreate />;
+ }
+ case HttpStatusCode.Unauthorized: {
+ return <LoginPage />;
+ }
+ default: {
+ assertUnreachable(result);
+ }
+ }
+ }
+
+ return (
+ <Fragment>
+ <NotificationCard notification={notif} />
+ <UpdatePage
+ category={{
+ ...result.body,
+ id: cid,
+ }}
+ onBack={onBack}
+ onUpdate={async (newInfo) => {
+ return lib.instance
+ .updateCategory(state.token, cid, newInfo)
+ .then((d) => {
+ if (d.type === "ok") {
+ onConfirm();
+ } else {
+ switch (d.case) {
+ case HttpStatusCode.NotFound: {
+ setNotif({
+ message: i18n.str`Could not update category`,
+ type: "ERROR",
+ description: i18n.str`Category id is unknown`,
+ });
+ break;
+ }
+ }
+ }
+ })
+ .catch((error) => {
+ setNotif({
+ message: i18n.str`Could not update category`,
+ type: "ERROR",
+ description:
+ error instanceof Error ? error.message : String(error),
+ });
+ });
+ }}
+ />
+ </Fragment>
+ );
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
deleted file mode 100644
index 3168c7cc4..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { h, VNode } from "preact";
-import { useState } from "preact/hooks";
-import { FormProvider } from "../../../components/form/FormProvider.js";
-import { Input } from "../../../components/form/Input.js";
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
-
-type Entity = TalerMerchantApi.InstanceReconfigurationMessage;
-interface Props {
- onUpdate: () => void;
- onDelete: () => void;
- selected: TalerMerchantApi.QueryInstancesResponse;
-}
-
-function convert(
- from: TalerMerchantApi.QueryInstancesResponse,
-): Entity {
- const defaults = {
- default_wire_fee_amortization: 1,
- use_stefan: true,
- default_pay_delay: { d_us: 1000 * 60 * 60 * 1000 }, //one hour
- default_wire_transfer_delay: { d_us: 1000 * 60 * 60 * 2 * 1000 }, //two hours
- };
- return { ...defaults, ...from };
-}
-
-export function DetailPage({ selected }: Props): VNode {
- const [value, valueHandler] = useState<Partial<Entity>>(convert(selected));
-
- const { i18n } = useTranslationContext();
-
- return (
- <div>
- <section class="hero is-hero-bar">
- <div class="hero-body">
- <div class="level">
- <div class="level-left">
- <div class="level-item">
- <h1 class="title">Here goes the instance description</h1>
- </div>
- </div>
- <div class="level-right" style="display: none;">
- <div class="level-item" />
- </div>
- </div>
- </div>
- </section>
-
- <section class="section is-main-section">
- <div class="columns">
- <div class="column" />
- <div class="column is-6">
- <FormProvider<Entity> object={value} valueHandler={valueHandler}>
- <Input<Entity> name="name" readonly label={i18n.str`Name`} />
- </FormProvider>
- </div>
- <div class="column" />
- </div>
- </section>
- </div>
- );
-}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
deleted file mode 100644
index e1a7f87f0..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-import { HttpStatusCode, TalerError, assertUnreachable } from "@gnu-taler/taler-util";
-import { Fragment, VNode, h } from "preact";
-import { useState } from "preact/hooks";
-import { ErrorLoadingMerchant } from "../../../components/ErrorLoadingMerchant.js";
-import { Loading } from "../../../components/exception/loading.js";
-import { DeleteModal } from "../../../components/modal/index.js";
-import { useSessionContext } from "../../../context/session.js";
-import { useInstanceDetails } from "../../../hooks/instance.js";
-import { LoginPage } from "../../login/index.js";
-import { NotFoundPageOrAdminCreate } from "../../notfound/index.js";
-import { DetailPage } from "./DetailPage.js";
-
-interface Props {
- onUpdate: () => void;
- onDelete: () => void;
-}
-
-export default function Detail({
- onUpdate,
- onDelete,
-}: Props): VNode {
- const { state } = useSessionContext();
- const result = useInstanceDetails();
- const [deleting, setDeleting] = useState<boolean>(false);
-
- // const { deleteInstance } = useInstanceAPI();
- const { lib } = useSessionContext();
-
- if (!result) return <Loading />
- if (result instanceof TalerError) {
- return <ErrorLoadingMerchant error={result} />
- }
- if (result.type === "fail") {
- switch(result.case) {
- case HttpStatusCode.Unauthorized: {
- return <LoginPage />
- }
- case HttpStatusCode.NotFound: {
- return <NotFoundPageOrAdminCreate />;
- }
- default: {
- assertUnreachable(result)
- }
- }
- }
-
-
- return (
- <Fragment>
- <DetailPage
- selected={result.body}
- onUpdate={onUpdate}
- onDelete={() => setDeleting(true)}
- />
- {deleting && (
- <DeleteModal
- element={{ name: result.body.name, id: state.instance }}
- onCancel={() => setDeleting(false)}
- onConfirm={async (): Promise<void> => {
- if (state.status !== "loggedIn") {
- return
- }
- try {
- await lib.instance.deleteCurrentInstance(state.token);
- onDelete();
- } catch (error) {
- //FIXME: show message error
- }
- setDeleting(false);
- }}
- />
- )}
- </Fragment>
- );
-}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx
deleted file mode 100644
index 42cb1cb02..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/stories.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import { MerchantApiProviderTesting } from "@gnu-taler/web-util/browser";
-import { FunctionalComponent, h } from "preact";
-import { DetailPage as TestedComponent } from "./DetailPage.js";
-
-export default {
- title: "Pages/Instance/Detail",
- component: TestedComponent,
- argTypes: {
- onUpdate: { action: "onUpdate" },
- onBack: { action: "onBack" },
- },
-};
-
-function createExample<Props>(
- Internal: FunctionalComponent<Props>,
- props: Partial<Props>,
-) {
- const component = (args: any) => (
- <MerchantApiProviderTesting
- value={{
- cancelRequest: () => { },
- changeBackend: () => { },
- config: {
- currency: "ARS",
- version: "1",
- currencies: {
- "ASD": {
- name: "testkudos",
- alt_unit_names: {},
- num_fractional_input_digits: 1,
- num_fractional_normal_digits: 1,
- num_fractional_trailing_zero_digits: 1,
- }
- },
- exchanges: [],
- name: "taler-merchant"
- },
- hints: [],
- lib: {} as any,
- onActivity: (() => { }) as any,
- url: new URL("asdasd"),
- }}
- >
- <Internal {...(props as any)} />
- </MerchantApiProviderTesting>
- );
- return { component, props };
-}
-
-export const Example = createExample(TestedComponent, {
- selected: {
- name: "name",
- auth: { method: "external" },
- address: {},
- user_type: "business",
- jurisdiction: {},
- use_stefan: true,
- default_pay_delay: {
- d_us: 1000 * 1000, //one second
- },
- default_wire_transfer_delay: {
- d_us: 1000 * 1000, //one second
- },
- merchant_pub: "ASDWQEKASJDKSADJ",
- },
-});
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/index.stories.ts b/packages/merchant-backoffice-ui/src/paths/instance/index.stories.ts
index 8f06937df..a21ba918e 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/index.stories.ts
+++ b/packages/merchant-backoffice-ui/src/paths/instance/index.stories.ts
@@ -14,5 +14,4 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-export * as details from "./details/stories.js";
export * as kycList from "./kyc/list/ListPage.stories.js";
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx
index 046636b4b..2220b6d1e 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.stories.tsx
@@ -34,23 +34,29 @@ export default {
export const Example = tests.createExample(TestedComponent, {
status: {
- timeout_kycs: [],
- pending_kycs: [
+ // timeout_kycs: [],
+ kyc_data: [
{
- aml_status: 0,
exchange_url: "http://exchange.taler",
payto_uri: "payto://iban/de123123123" as PaytoString,
- kyc_url: "http://exchange.taler/kyc",
+ // kyc_url: "http://exchange.taler/kyc",
+ exchange_http_status: 0,
+ auth_conflict: false,
+ no_keys: false,
},
{
- aml_status: 1,
+ exchange_http_status: 1,
exchange_url: "http://exchange.taler",
payto_uri: "payto://iban/de123123123" as PaytoString,
+ auth_conflict: false,
+ no_keys: false,
},
{
- aml_status: 2,
+ exchange_http_status: 2,
exchange_url: "http://exchange.taler",
payto_uri: "payto://iban/de123123123" as PaytoString,
+ auth_conflict: false,
+ no_keys: false,
},
],
},
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx
index 3eeed1d7b..f0323ac4f 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/ListPage.tsx
@@ -24,10 +24,16 @@ import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { h, VNode } from "preact";
export interface Props {
- status: TalerMerchantApi.AccountKycRedirects;
+ status: TalerMerchantApi.MerchantAccountKycRedirectsResponse;
+ // onGetInfo: (url: string, token: AccessToken) => void;
+ onShowInstructions: (toAccounts: string[], fromAccount: string) => void;
}
-export function ListPage({ status }: Props): VNode {
+export function ListPage({
+ status,
+ // onGetInfo,
+ onShowInstructions,
+}: Props): VNode {
const { i18n } = useTranslationContext();
return (
@@ -46,8 +52,12 @@ export function ListPage({ status }: Props): VNode {
<div class="card-content">
<div class="b-table has-pagination">
<div class="table-wrapper has-mobile-cards">
- {status.pending_kycs.length > 0 ? (
- <PendingTable entries={status.pending_kycs} />
+ {status.kyc_data.length > 0 ? (
+ <PendingTable
+ entries={status.kyc_data}
+ // onGetInfo={onGetInfo}
+ onShowInstructions={onShowInstructions}
+ />
) : (
<EmptyTable />
)}
@@ -55,44 +65,24 @@ export function ListPage({ status }: Props): VNode {
</div>
</div>
</div>
-
- {status.timeout_kycs.length > 0 ? (
- <div class="card has-table">
- <header class="card-header">
- <p class="card-header-title">
- <span class="icon">
- <i class="mdi mdi-clock" />
- </span>
- <i18n.Translate>Timed out</i18n.Translate>
- </p>
-
- <div class="card-header-icon" aria-label="more options" />
- </header>
- <div class="card-content">
- <div class="b-table has-pagination">
- <div class="table-wrapper has-mobile-cards">
- {status.timeout_kycs.length > 0 ? (
- <TimedOutTable entries={status.timeout_kycs} />
- ) : (
- <EmptyTable />
- )}
- </div>
- </div>
- </div>
- </div>
- ) : undefined}
</section>
);
}
interface PendingTableProps {
entries: TalerMerchantApi.MerchantAccountKycRedirect[];
+ // onGetInfo: (url: string, token: AccessToken) => void;
+ onShowInstructions: (toAccounts: string[], fromAccount: string) => void;
}
interface TimedOutTableProps {
entries: TalerMerchantApi.ExchangeKycTimeout[];
}
-function PendingTable({ entries }: PendingTableProps): VNode {
+function PendingTable({
+ entries,
+ onShowInstructions,
+ // onGetInfo,
+}: PendingTableProps): VNode {
const { i18n } = useTranslationContext();
return (
<div class="table-container">
@@ -103,7 +93,7 @@ function PendingTable({ entries }: PendingTableProps): VNode {
<i18n.Translate>Exchange</i18n.Translate>
</th>
<th>
- <i18n.Translate>Target account</i18n.Translate>
+ <i18n.Translate>Account</i18n.Translate>
</th>
<th>
<i18n.Translate>Reason</i18n.Translate>
@@ -112,38 +102,38 @@ function PendingTable({ entries }: PendingTableProps): VNode {
</thead>
<tbody>
{entries.map((e, i) => {
- if (e.kyc_url === undefined) {
- // blocked by AML
+ if (e.payto_kycauths === undefined) {
+ const spa = new URL(`kyc-spa/${e.access_token}`, e.exchange_url)
+ .href;
return (
<tr key={i}>
<td>{e.exchange_url}</td>
<td>{e.payto_uri}</td>
<td>
- {e.aml_status === 1 ? (
- <i18n.Translate>
- There is an anti-money laundering process pending to
- complete.
- </i18n.Translate>
- ) : (
+ <a href={spa} target="_black" rel="noreferrer">
<i18n.Translate>
- The account is frozen due to the anti-money laundering
- rules. Contact the exchange service provider for further
- instructions.
+ Pending KYC process, click here to complete
</i18n.Translate>
- )}
+ </a>
</td>
</tr>
);
} else {
- // blocked by KYC
+ const accounts = e.payto_kycauths;
return (
<tr key={i}>
<td>{e.exchange_url}</td>
- <td>{e.payto_uri}</td>
+ <td
+ onClick={() => onShowInstructions(accounts, e.payto_uri)}
+ style={{ cursor: "pointer" }}
+ >
+ {e.payto_uri}
+ </td>
<td>
- <a href={e.kyc_url} target="_black" rel="noreferrer">
+ <a href={e.access_token} target="_black" rel="noreferrer">
<i18n.Translate>
- Pending KYC process, click here to complete
+ The Payment Service Provider requires an account
+ verification.
</i18n.Translate>
</a>
</td>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx
index ed0e1220f..9f65be0c3 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/kyc/list/index.tsx
@@ -19,21 +19,34 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, TalerError, assertUnreachable } from "@gnu-taler/taler-util";
-import { VNode, h } from "preact";
+import {
+ HttpStatusCode,
+ TalerError,
+ TalerExchangeHttpClient,
+ assertUnreachable,
+ parsePaytoUri,
+} from "@gnu-taler/taler-util";
+import { Fragment, VNode, h } from "preact";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
import { Loading } from "../../../../components/exception/loading.js";
import { useInstanceKYCDetails } from "../../../../hooks/instance.js";
import { ListPage } from "./ListPage.js";
+import { useState } from "preact/hooks";
+import { ValidBankAccount } from "../../../../components/modal/index.js";
interface Props {
+ // onGetInfo: (id: string) => void;
+ // onShowInstructions: (id: string) => void;
}
export default function ListKYC(_p: Props): VNode {
const result = useInstanceKYCDetails();
- if (!result) return <Loading />
+ const [showingInstructions, setShowingInstructions] = useState<
+ { toAccounts: string[]; fromAccount: string } | undefined
+ >(undefined);
+ if (!result) return <Loading />;
if (result instanceof TalerError) {
- return <ErrorLoadingMerchant error={result} />
+ return <ErrorLoadingMerchant error={result} />;
}
/**
* This component just render known kyc requirements.
@@ -42,28 +55,31 @@ export default function ListKYC(_p: Props): VNode {
if (result.type === "fail") {
switch (result.case) {
case HttpStatusCode.GatewayTimeout: {
- return <div />
+ return <div />;
}
case HttpStatusCode.BadGateway: {
- const status = result.body;
-
- if (!status) {
- return <div>no kyc required</div>;
- }
- return <ListPage status={status} />;
-
+ break;
+ // return (
+ // <ListPage
+ // status={result.body}
+ // onGetInfo={_p.onGetInfo}
+ // onShowInstructions={() => {
+ // setShowingInstructions(true)
+ // }}
+ // />
+ // );
}
case HttpStatusCode.ServiceUnavailable: {
- return <div />
+ return <div />;
}
case HttpStatusCode.Unauthorized: {
- return <div />
+ return <div />;
}
case HttpStatusCode.NotFound: {
return <div />;
}
default: {
- assertUnreachable(result)
+ assertUnreachable(result);
}
}
}
@@ -72,5 +88,28 @@ export default function ListKYC(_p: Props): VNode {
if (!status) {
return <div>no kyc required</div>;
}
- return <ListPage status={status} />;
+ return (
+ <Fragment>
+ {showingInstructions !== undefined ? (
+ <Fragment>
+ <ValidBankAccount
+ origin={parsePaytoUri(showingInstructions.fromAccount)!}
+ targets={showingInstructions.toAccounts.map(
+ (d) => parsePaytoUri(d)!,
+ )}
+ onCancel={() => setShowingInstructions(undefined)}
+ />
+ </Fragment>
+ ) : undefined}
+ <ListPage
+ status={status}
+ // onGetInfo={async (exchange, ac) => {
+ // new URL()
+ // }}
+ onShowInstructions={(toAccounts, fromAccount) => {
+ setShowingInstructions({ toAccounts, fromAccount });
+ }}
+ />
+ </Fragment>
+ );
}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
index 151905b5e..149a0cd5c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
@@ -27,15 +27,14 @@ import {
TalerMerchantApi,
TalerProtocolDuration,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { format, isFuture } from "date-fns";
import { Fragment, VNode, h } from "preact";
import { useEffect, useState } from "preact/hooks";
import {
FormErrors,
FormProvider,
+ TalerForm,
} from "../../../../components/form/FormProvider.js";
import { Input } from "../../../../components/form/Input.js";
import { InputCurrency } from "../../../../components/form/InputCurrency.js";
@@ -49,10 +48,11 @@ import { InventoryProductForm } from "../../../../components/product/InventoryPr
import { NonInventoryProductFrom } from "../../../../components/product/NonInventoryProductForm.js";
import { ProductList } from "../../../../components/product/ProductList.js";
import { useSessionContext } from "../../../../context/session.js";
+import { WithId } from "../../../../declaration.js";
import { usePreference } from "../../../../hooks/preference.js";
import { rate } from "../../../../utils/amount.js";
import { undefinedIfEmpty } from "../../../../utils/table.js";
-import { WithId } from "../../../../declaration.js";
+import { error } from "console";
interface Props {
onCreate: (d: TalerMerchantApi.PostOrderRequest) => void;
@@ -76,6 +76,10 @@ function with_defaults(
const defaultWireDeadline = Duration.fromTalerProtocolDuration(
config.default_wire_transfer_delay,
);
+ const defaultRefundDeadline = Duration.min(
+ defaultWireDeadline,
+ Duration.fromSpec({ days: 15 }),
+ );
return {
inventoryProducts: {},
@@ -85,7 +89,7 @@ function with_defaults(
max_fee: undefined,
createToken: true,
pay_deadline: defaultPayDeadline,
- refund_deadline: defaultPayDeadline,
+ refund_deadline: defaultRefundDeadline,
wire_transfer_deadline: defaultWireDeadline,
},
shipping: {},
@@ -101,26 +105,26 @@ export interface ProductMap {
[id: string]: ProductAndQuantity;
}
-interface Pricing {
+interface Pricing extends TalerForm {
products_price: string;
order_price: string;
summary: string;
}
-interface Shipping {
+interface Shipping extends TalerForm {
delivery_date?: Date;
delivery_location?: TalerMerchantApi.Location;
fullfilment_url?: string;
}
-interface Payments {
+interface Payments extends TalerForm {
refund_deadline: Duration;
pay_deadline: Duration;
wire_transfer_deadline: Duration;
- auto_refund_deadline: Duration;
+ auto_refund_deadline?: Duration;
max_fee?: string;
createToken: boolean;
minimum_age?: number;
}
-interface Entity {
+interface Entity extends TalerForm {
inventoryProducts: ProductMap;
products: TalerMerchantApi.Product[];
pricing: Partial<Pricing>;
@@ -149,15 +153,15 @@ export function CreatePage({
? undefined
: Amounts.parse(value.pricing.order_price);
- const errors: FormErrors<Entity> = {
- pricing: undefinedIfEmpty({
- summary: !value.pricing?.summary ? i18n.str`required` : undefined,
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ pricing: undefinedIfEmpty<FormErrors<Pricing>>({
+ summary: !value.pricing?.summary ? i18n.str`Required` : undefined,
order_price: !value.pricing?.order_price
- ? i18n.str`required`
+ ? i18n.str`Required`
: !parsedPrice
- ? i18n.str`not valid`
+ ? i18n.str`Invalid`
: Amounts.isZero(parsedPrice)
- ? i18n.str`must be greater than 0`
+ ? i18n.str`Must be greater than 0`
: undefined,
}),
payments: undefinedIfEmpty({
@@ -168,58 +172,59 @@ export function CreatePage({
value.payments.refund_deadline,
value.payments.pay_deadline,
) === -1
- ? i18n.str`refund deadline cannot be before pay deadline`
+ ? i18n.str`Refund deadline can't be before pay deadline`
: value.payments.wire_transfer_deadline &&
Duration.cmp(
value.payments.wire_transfer_deadline,
value.payments.refund_deadline,
) === -1
- ? i18n.str`wire transfer deadline cannot be before refund deadline`
+ ? i18n.str`Wire transfer deadline can't be before refund deadline`
: undefined,
pay_deadline: !value.payments?.pay_deadline
- ? i18n.str`required`
+ ? i18n.str`Required`
: value.payments.wire_transfer_deadline &&
Duration.cmp(
value.payments.wire_transfer_deadline,
value.payments.pay_deadline,
) === -1
- ? i18n.str`wire transfer deadline cannot be before pay deadline`
+ ? i18n.str`Wire transfer deadline can't be before pay deadline`
: undefined,
wire_transfer_deadline: !value.payments?.wire_transfer_deadline
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined,
auto_refund_deadline: !value.payments?.auto_refund_deadline
? undefined
: !value.payments?.refund_deadline
- ? i18n.str`should have a refund deadline`
+ ? i18n.str`Must have a refund deadline`
: Duration.cmp(
value.payments.refund_deadline,
value.payments.auto_refund_deadline,
) == -1
- ? i18n.str`auto refund cannot be after refund deadline`
+ ? i18n.str`Auto refund can't be after refund deadline`
: undefined,
}),
shipping: undefinedIfEmpty({
delivery_date: !value.shipping?.delivery_date
? undefined
: !isFuture(value.shipping.delivery_date)
- ? i18n.str`should be in the future`
+ ? i18n.str`Must be in the future`
: undefined,
}),
- };
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ });
+ const hasErrors = errors !== undefined;
const submit = (): void => {
- const order = value as any; //schema.cast(value);
+ const order = value;
+ const price = order.pricing?.order_price as AmountString | undefined;
+ const summary = order.pricing?.summary;
if (!value.payments) return;
if (!value.shipping) return;
+ if (!price || !summary) return;
const request: TalerMerchantApi.PostOrderRequest = {
order: {
- amount: order.pricing.order_price,
- summary: order.pricing.summary,
+ amount: price,
+ summary: summary,
products: productList,
extra: undefinedIfEmpty(value.extra),
pay_deadline: AbsoluteTime.toProtocolTimestamp(
@@ -340,7 +345,9 @@ export function CreatePage({
const minAgeByProducts = inventoryList.reduce(
(cur, prev) =>
- !prev.product.minimum_age || cur > prev.product.minimum_age ? cur : prev.product.minimum_age,
+ !prev.product.minimum_age || cur > prev.product.minimum_age
+ ? cur
+ : prev.product.minimum_age,
0,
);
@@ -396,8 +403,10 @@ export function CreatePage({
alternative={
allProducts.length > 0 && (
<p>
- {allProducts.length} products with a total price of{" "}
- {totalAsString}.
+ <i18n.Translate>
+ {allProducts.length} products with a total price of{" "}
+ {totalAsString}.
+ </i18n.Translate>
</p>
)
}
@@ -451,7 +460,7 @@ export function CreatePage({
name="pricing.products_price"
label={i18n.str`Total price`}
readonly
- tooltip={i18n.str`total product price added up`}
+ tooltip={i18n.str`Total product price added up`}
/>
<InputCurrency
name="pricing.order_price"
@@ -471,7 +480,7 @@ export function CreatePage({
<InputCurrency
name="pricing.order_price"
label={i18n.str`Order price`}
- tooltip={i18n.str`final order price`}
+ tooltip={i18n.str`Final order price`}
/>
)}
@@ -482,10 +491,10 @@ export function CreatePage({
tooltip={i18n.str`Title of the order to be shown to the customer`}
/>
- {pref.advanceOrderMode && (
+ {(pref.advanceOrderMode|| errors?.shipping) && (
<InputGroup
name="shipping"
- label={i18n.str`Shipping and Fulfillment`}
+ label={i18n.str`Shipping and fulfillment`}
initialActive
>
<InputDate
@@ -497,7 +506,7 @@ export function CreatePage({
<InputGroup
name="shipping.delivery_location"
label={i18n.str`Location`}
- tooltip={i18n.str`address where the products will be delivered`}
+ tooltip={i18n.str`Address where the products will be delivered`}
>
<InputLocation name="shipping.delivery_location" />
</InputGroup>
@@ -510,13 +519,13 @@ export function CreatePage({
</InputGroup>
)}
- {(pref.advanceOrderMode || requiresSomeTalerOptions) && (
+ {(pref.advanceOrderMode || requiresSomeTalerOptions || errors?.payments) && (
<InputGroup
name="payments"
label={i18n.str`Taler payment options`}
tooltip={i18n.str`Override default Taler payment settings for this order`}
>
- {(pref.advanceOrderMode || noDefault_payDeadline) && (
+ {(pref.advanceOrderMode || noDefault_payDeadline || errors?.payments?.pay_deadline !== undefined) && (
<InputDuration
name="payments.pay_deadline"
label={i18n.str`Payment time`}
@@ -542,13 +551,13 @@ export function CreatePage({
valueHandler(c);
}}
>
- <i18n.Translate>default</i18n.Translate>
+ <i18n.Translate>Default</i18n.Translate>
</button>
</span>
}
/>
)}
- {pref.advanceOrderMode && (
+ {(pref.advanceOrderMode || errors?.payments?.refund_deadline !== undefined) && (
<InputDuration
name="payments.refund_deadline"
label={i18n.str`Refund time`}
@@ -575,13 +584,13 @@ export function CreatePage({
});
}}
>
- <i18n.Translate>default</i18n.Translate>
+ <i18n.Translate>Default</i18n.Translate>
</button>
</span>
}
/>
)}
- {(pref.advanceOrderMode || noDefault_wireDeadline) && (
+ {(pref.advanceOrderMode || noDefault_wireDeadline || errors?.payments?.wire_transfer_deadline !== undefined) && (
<InputDuration
name="payments.wire_transfer_deadline"
label={i18n.str`Wire transfer time`}
@@ -609,13 +618,13 @@ export function CreatePage({
});
}}
>
- <i18n.Translate>default</i18n.Translate>
+ <i18n.Translate>Default</i18n.Translate>
</button>
</span>
}
/>
)}
- {pref.advanceOrderMode && (
+ {(pref.advanceOrderMode || errors?.payments?.auto_refund_deadline !== undefined) && (
<InputDuration
name="payments.auto_refund_deadline"
label={i18n.str`Auto-refund time`}
@@ -629,21 +638,21 @@ export function CreatePage({
/>
)}
- {pref.advanceOrderMode && (
+ {(pref.advanceOrderMode || errors?.payments?.max_fee !== undefined) && (
<InputCurrency
name="payments.max_fee"
label={i18n.str`Maximum fee`}
tooltip={i18n.str`Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.`}
/>
)}
- {pref.advanceOrderMode && (
+ {(pref.advanceOrderMode|| errors?.payments?.createToken !== undefined) && (
<InputToggle
name="payments.createToken"
label={i18n.str`Create token`}
- tooltip={i18n.str`If the order ID is easy to guess the token will prevent user to steal orders from others.`}
+ tooltip={i18n.str`If the order ID is easy to guess the token will prevent users to steal orders from others.`}
/>
)}
- {pref.advanceOrderMode && (
+ {(pref.advanceOrderMode|| errors?.payments?.minimum_age !== undefined) && (
<InputNumber
name="payments.minimum_age"
label={i18n.str`Minimum age required`}
@@ -658,7 +667,7 @@ export function CreatePage({
</InputGroup>
)}
- {pref.advanceOrderMode && (
+ {(pref.advanceOrderMode|| errors?.extra !== undefined) && (
<InputGroup
name="extra"
label={i18n.str`Additional information`}
@@ -731,7 +740,7 @@ export function CreatePage({
e.preventDefault();
}}
>
- add
+ <i18n.Translate>Add</i18n.Translate>
</button>
</div>
</InputGroup>
@@ -793,3 +802,17 @@ function DeadlineHelp({ duration }: { duration?: Duration }): VNode {
</i18n.Translate>
);
}
+
+function getAll(s: object): string[] {
+ return Object.entries(s).flatMap(([key, value]) => {
+ if (typeof value === "object")
+ return getAll(value).map((v) => `${key}.${v}`);
+ if (!value) return [];
+ return key;
+ });
+}
+
+function describeMissingFields(errors: object | undefined): string[] {
+ if (!errors) return [];
+ return getAll(errors);
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
index 04f0b2482..32fa96cc1 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
@@ -37,6 +37,7 @@ import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
import { CreatePage } from "./CreatePage.js";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
export type Entity = {
request: TalerMerchantApi.PostOrderRequest;
@@ -47,11 +48,12 @@ interface Props {
onConfirm: (id: string) => void;
}
export default function OrderCreate({ onConfirm, onBack }: Props): VNode {
- const { lib } = useSessionContext();
+ const { state, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { state } = useSessionContext();
const detailsResult = useInstanceDetails();
+ // FIXME: if the product list is big the will bring a lot of info
const inventoryResult = useInstanceProducts();
+ const { i18n } = useTranslationContext();
if (!detailsResult) return <Loading />;
if (detailsResult instanceof TalerError) {
@@ -97,21 +99,49 @@ export default function OrderCreate({ onConfirm, onBack }: Props): VNode {
onCreate={(request: TalerMerchantApi.PostOrderRequest) => {
lib.instance
.createOrder(state.token, request)
- .then((r) => {
- if (r.type === "ok") {
- return onConfirm(r.body.order_id);
+ .then((resp) => {
+ if (resp.type === "ok") {
+ return onConfirm(resp.body.order_id);
} else {
- setNotif({
- message: "could not create order",
- type: "ERROR",
- });
+ switch (resp.case) {
+ case HttpStatusCode.UnavailableForLegalReasons: {
+ setNotif({
+ message: i18n.str`Could not create order`,
+ type: "ERROR",
+ description: i18n.str`No exchange would accept a payment because of KYC requirements.`,
+ });
+ return;
+ }
+ case HttpStatusCode.Unauthorized:
+ case HttpStatusCode.NotFound:
+ case HttpStatusCode.Conflict: {
+ setNotif({
+ message: i18n.str`Could not create order`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ return;
+ }
+ case HttpStatusCode.Gone: {
+ setNotif({
+ message: i18n.str`Could not create order`,
+ type: "ERROR",
+ description: i18n.str`No more stock for product with ID "${resp.body.product_id}".`,
+ });
+ return;
+ }
+ default: {
+ assertUnreachable(resp);
+ }
+ }
}
})
.catch((error) => {
setNotif({
- message: "could not create order",
+ message: i18n.str`Could not create order`,
type: "ERROR",
- description: error.message,
+ description:
+ error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
index 498ea83e3..57c18fcea 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
@@ -25,9 +25,7 @@ import {
TalerMerchantApi,
stringifyRefundUri,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { format, formatDistance } from "date-fns";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
@@ -69,19 +67,19 @@ function ContractTerms({ value }: { value: CT }) {
const { i18n } = useTranslationContext();
return (
- <InputGroup name="contract_terms" label={i18n.str`Contract Terms`}>
+ <InputGroup name="contract_terms" label={i18n.str`Contract terms`}>
<FormProvider<CT> object={value} valueHandler={null}>
<Input<CT>
readonly
name="summary"
label={i18n.str`Summary`}
- tooltip={i18n.str`human-readable description of the whole purchase`}
+ tooltip={i18n.str`Human-readable description of the whole purchase`}
/>
<InputCurrency<CT>
readonly
name="amount"
label={i18n.str`Amount`}
- tooltip={i18n.str`total price for the transaction`}
+ tooltip={i18n.str`Total price for the transaction`}
/>
{value.fulfillment_url && (
<Input<CT>
@@ -95,43 +93,43 @@ function ContractTerms({ value }: { value: CT }) {
readonly
name="max_fee"
label={i18n.str`Max fee`}
- tooltip={i18n.str`maximum total deposit fee accepted by the merchant for this contract`}
+ tooltip={i18n.str`Maximum total deposit fee accepted by the merchant for this contract`}
/>
<InputDate<CT>
readonly
name="timestamp"
label={i18n.str`Created at`}
- tooltip={i18n.str`time when this contract was generated`}
+ tooltip={i18n.str`Time when this contract was generated`}
/>
<InputDate<CT>
readonly
name="refund_deadline"
label={i18n.str`Refund deadline`}
- tooltip={i18n.str`after this deadline has passed no refunds will be accepted`}
+ tooltip={i18n.str`After this deadline has passed no refunds will be accepted`}
/>
<InputDate<CT>
readonly
name="pay_deadline"
label={i18n.str`Payment deadline`}
- tooltip={i18n.str`after this deadline, the merchant won't accept payments for the contract`}
+ tooltip={i18n.str`After this deadline, the merchant won't accept payments for the contract`}
/>
<InputDate<CT>
readonly
name="wire_transfer_deadline"
label={i18n.str`Wire transfer deadline`}
- tooltip={i18n.str`transfer deadline for the exchange`}
+ tooltip={i18n.str`Transfer deadline for the exchange`}
/>
<InputDate<CT>
readonly
name="delivery_date"
label={i18n.str`Delivery date`}
- tooltip={i18n.str`time indicating when the order should be delivered`}
+ tooltip={i18n.str`Time indicating when the order should be delivered`}
/>
{value.delivery_date && (
<InputGroup
name="delivery_location"
label={i18n.str`Location`}
- tooltip={i18n.str`where the order will be delivered`}
+ tooltip={i18n.str`Where the order will be delivered`}
>
<InputLocation name="payments.delivery_location" />
</InputGroup>
@@ -140,13 +138,13 @@ function ContractTerms({ value }: { value: CT }) {
readonly
name="auto_refund"
label={i18n.str`Auto-refund delay`}
- tooltip={i18n.str`how long the wallet should try to get an automatic refund for the purchase`}
+ tooltip={i18n.str`How long the wallet should try to get an automatic refund for the purchase`}
/>
<Input<CT>
readonly
name="extra"
label={i18n.str`Extra info`}
- tooltip={i18n.str`extra data that is only interpreted by the merchant frontend`}
+ tooltip={i18n.str`Extra data that is only interpreted by the merchant frontend`}
/>
</FormProvider>
</InputGroup>
@@ -221,7 +219,7 @@ function ClaimedPage({
<div class="level-item">
<i18n.Translate>Order</i18n.Translate> #{id}
<div class="tag is-info ml-4">
- <i18n.Translate>claimed</i18n.Translate>
+ <i18n.Translate>Claimed</i18n.Translate>
</div>
</div>
</div>
@@ -248,7 +246,7 @@ function ClaimedPage({
>
<p>
<b>
- <i18n.Translate>claimed at</i18n.Translate>:
+ <i18n.Translate>Claimed at</i18n.Translate>:
</b>{" "}
{order.contract_terms.timestamp.t_s === "never"
? "never"
@@ -458,16 +456,16 @@ function PaidPage({
<div class="level-item">
<i18n.Translate>Order</i18n.Translate> #{id}
<div class="tag is-success ml-4">
- <i18n.Translate>paid</i18n.Translate>
+ <i18n.Translate>Paid</i18n.Translate>
</div>
{order.wired ? (
<div class="tag is-success ml-4">
- <i18n.Translate>wired</i18n.Translate>
+ <i18n.Translate>Wired</i18n.Translate>
</div>
) : null}
{order.refunded ? (
<div class="tag is-danger ml-4">
- <i18n.Translate>refunded</i18n.Translate>
+ <i18n.Translate>Refunded</i18n.Translate>
</div>
) : null}
</div>
@@ -487,8 +485,8 @@ function PaidPage({
class="has-tooltip-left"
data-tooltip={
refundable
- ? i18n.str`refund order`
- : i18n.str`not refundable`
+ ? i18n.str`Refund order`
+ : i18n.str`Not refundable`
}
>
<button
@@ -496,7 +494,7 @@ function PaidPage({
disabled={!refundable}
onClick={() => onRefund(id)}
>
- <i18n.Translate>refund</i18n.Translate>
+ <i18n.Translate>Refund</i18n.Translate>
</button>
</span>
</div>
@@ -638,7 +636,7 @@ function UnpaidPage({
</h1>
</div>
<div class="tag is-dark">
- <i18n.Translate>unpaid</i18n.Translate>
+ <i18n.Translate>Unpaid</i18n.Translate>
</div>
</div>
</div>
@@ -656,7 +654,7 @@ function UnpaidPage({
>
<p>
<b>
- <i18n.Translate>pay at</i18n.Translate>:
+ <i18n.Translate>Pay at</i18n.Translate>:
</b>{" "}
<a
href={order.order_status_url}
@@ -668,7 +666,7 @@ function UnpaidPage({
</p>
<p>
<b>
- <i18n.Translate>created at</i18n.Translate>:
+ <i18n.Translate>Created at</i18n.Translate>:
</b>{" "}
{order.creation_time.t_s === "never"
? "never"
@@ -693,13 +691,13 @@ function UnpaidPage({
readonly
name="summary"
label={i18n.str`Summary`}
- tooltip={i18n.str`human-readable description of the whole purchase`}
+ tooltip={i18n.str`Human-readable description of the whole purchase`}
/>
<InputCurrency<Unpaid>
readonly
name="total_amount"
label={i18n.str`Amount`}
- tooltip={i18n.str`total price for the transaction`}
+ tooltip={i18n.str`Total price for the transaction`}
/>
<Input<Unpaid>
name="order_status"
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
index b28e59b29..c7edce834 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
@@ -18,9 +18,7 @@ import {
TalerError,
assertUnreachable,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
@@ -41,8 +39,7 @@ export interface Props {
export default function Update({ oid, onBack }: Props): VNode {
const result = useOrderDetails(oid);
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { lib: api } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const { i18n } = useTranslationContext();
@@ -64,7 +61,7 @@ export default function Update({ oid, onBack }: Props): VNode {
);
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
assertUnreachable(result);
@@ -83,19 +80,47 @@ export default function Update({ oid, onBack }: Props): VNode {
if (state.status !== "loggedIn") {
return;
}
- api.instance
+ lib.instance
.addRefund(state.token, id, value)
- .then(() =>
- setNotif({
- message: i18n.str`refund created successfully`,
- type: "SUCCESS",
- }),
- )
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Refund created successfully`,
+ type: "SUCCESS",
+ });
+ } else {
+ switch (resp.case) {
+ case HttpStatusCode.UnavailableForLegalReasons: {
+ setNotif({
+ message: i18n.str`Could not create the refund`,
+ type: "ERROR",
+ description: i18n.str`There are pending KYC requirements.`
+ });
+ return;
+ }
+ case HttpStatusCode.Unauthorized:
+ case HttpStatusCode.Forbidden:
+ case HttpStatusCode.NotFound:
+ case HttpStatusCode.Conflict:
+ case HttpStatusCode.Gone: {
+ setNotif({
+ message: i18n.str`Could not create the refund`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ return;
+ }
+ default: {
+ assertUnreachable(resp)
+ }
+ }
+ }
+ })
.catch((error) =>
setNotif({
- message: i18n.str`could not create the refund`,
+ message: i18n.str`Could not create the refund`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
}),
);
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
index 4681f9943..5e6539999 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
@@ -80,7 +80,7 @@ export function ListPage({
isWiredActive,
}: ListPageProps): VNode {
const { i18n } = useTranslationContext();
- const dateTooltip = i18n.str`select date to show nearby orders`;
+ const dateTooltip = i18n.str`Select date to show nearby orders`;
const [pickDate, setPickDate] = useState(false);
const [settings] = usePreference();
@@ -93,7 +93,7 @@ export function ListPage({
<li class={isNotPaidActive}>
<div
class="has-tooltip-right"
- data-tooltip={i18n.str`only show paid orders`}
+ data-tooltip={i18n.str`Only show paid orders`}
>
<a onClick={onShowNotPaid}>
<i18n.Translate>New</i18n.Translate>
@@ -103,7 +103,7 @@ export function ListPage({
<li class={isPaidActive}>
<div
class="has-tooltip-right"
- data-tooltip={i18n.str`only show paid orders`}
+ data-tooltip={i18n.str`Only show paid orders`}
>
<a onClick={onShowPaid}>
<i18n.Translate>Paid</i18n.Translate>
@@ -113,7 +113,7 @@ export function ListPage({
<li class={isRefundedActive}>
<div
class="has-tooltip-right"
- data-tooltip={i18n.str`only show orders with refunds`}
+ data-tooltip={i18n.str`Only show orders with refunds`}
>
<a onClick={onShowRefunded}>
<i18n.Translate>Refunded</i18n.Translate>
@@ -123,7 +123,7 @@ export function ListPage({
<li class={isNotWiredActive}>
<div
class="has-tooltip-left"
- data-tooltip={i18n.str`only show orders where customers paid, but wire payments from payment provider are still pending`}
+ data-tooltip={i18n.str`Only display orders that have already been paid for by buyers and for which the wire transfer by the payment service provider is still pending`}
>
<a onClick={onShowNotWired}>
<i18n.Translate>Not wired</i18n.Translate>
@@ -133,7 +133,7 @@ export function ListPage({
<li class={isWiredActive}>
<div
class="has-tooltip-left"
- data-tooltip={i18n.str`only show orders where customers paid, but wire payments from payment provider are still pending`}
+ data-tooltip={i18n.str`Only display orders that have already been transfered by the payment service provider`}
>
<a onClick={onShowWired}>
<i18n.Translate>Completed</i18n.Translate>
@@ -143,7 +143,7 @@ export function ListPage({
<li class={isAllActive}>
<div
class="has-tooltip-right"
- data-tooltip={i18n.str`remove all filters`}
+ data-tooltip={i18n.str`Remove all filters`}
>
<a onClick={onShowAll}>
<i18n.Translate>All</i18n.Translate>
@@ -161,7 +161,7 @@ export function ListPage({
<a class="button is-fullwidth" onClick={() => onSelectDate(undefined)}>
<span
class="icon"
- data-tooltip={i18n.str`clear date filter`}
+ data-tooltip={i18n.str`Clear date filter`}
>
<i class="mdi mdi-close" />
</span>
@@ -175,7 +175,7 @@ export function ListPage({
type="text"
readonly
value={!jumpToDate || jumpToDate.t_ms === "never" ? "" : format(jumpToDate.t_ms, dateFormatForSettings(settings))}
- placeholder={i18n.str`date (${dateFormatForSettings(settings)})`}
+ placeholder={i18n.str`Jump to date (${dateFormatForSettings(settings)})`}
onClick={() => {
setPickDate(true);
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
index 7b9691fdd..ca4c37481 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
@@ -20,9 +20,7 @@
*/
import { Amounts, TalerMerchantApi } from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { format } from "date-fns";
import { VNode, h } from "preact";
import { StateUpdater, useState } from "preact/hooks";
@@ -80,7 +78,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options" />
<div class="card-header-icon" aria-label="more options">
- <span class="has-tooltip-left" data-tooltip={i18n.str`create order`}>
+ <span class="has-tooltip-left" data-tooltip={i18n.str`Create order`}>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
<i class="mdi mdi-plus mdi-36px" />
@@ -137,7 +135,7 @@ function Table({
<div class="table-container">
{onLoadMoreBefore && (
<button class="button is-fullwidth" onClick={onLoadMoreBefore}>
- <i18n.Translate>load first page</i18n.Translate>
+ <i18n.Translate>Load first page</i18n.Translate>
</button>
)}
<table class="table is-striped is-hoverable is-fullwidth">
@@ -210,10 +208,12 @@ function Table({
</tbody>
</table>
{onLoadMoreAfter && (
- <button class="button is-fullwidth"
- data-tooltip={i18n.str`load more orders after the last one`}
- onClick={onLoadMoreAfter}>
- <i18n.Translate>load next page</i18n.Translate>
+ <button
+ class="button is-fullwidth"
+ data-tooltip={i18n.str`Load more orders after the last one`}
+ onClick={onLoadMoreAfter}
+ >
+ <i18n.Translate>Load next page</i18n.Translate>
</button>
)}
</div>
@@ -277,20 +277,20 @@ export function RefundModal({
: orderPrice;
const isRefundable = Amounts.isNonZero(totalRefundable);
- const duplicatedText = i18n.str`duplicated`;
+ const duplicatedText = i18n.str`Duplicated`;
const errors: FormErrors<State> = {
- mainReason: !form.mainReason ? i18n.str`required` : undefined,
+ mainReason: !form.mainReason ? i18n.str`Required` : undefined,
description:
!form.description && form.mainReason !== duplicatedText
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined,
refund: !form.refund
- ? i18n.str`required`
+ ? i18n.str`Required`
: !Amounts.parse(form.refund)
- ? i18n.str`invalid format`
+ ? i18n.str`Invalid`
: Amounts.cmp(totalRefundable, Amounts.parse(form.refund)!) === -1
- ? i18n.str`this value exceed the refundable amount`
+ ? i18n.str`This value exceed the refundable amount`
: undefined,
};
const hasErrors = Object.keys(errors).some(
@@ -335,13 +335,13 @@ export function RefundModal({
<thead>
<tr>
<th>
- <i18n.Translate>date</i18n.Translate>
+ <i18n.Translate>Date</i18n.Translate>
</th>
<th>
- <i18n.Translate>amount</i18n.Translate>
+ <i18n.Translate>Amount</i18n.Translate>
</th>
<th>
- <i18n.Translate>reason</i18n.Translate>
+ <i18n.Translate>Reason</i18n.Translate>
</th>
</tr>
</thead>
@@ -378,7 +378,7 @@ export function RefundModal({
<InputCurrency<State>
name="refund"
label={i18n.str`Refund`}
- tooltip={i18n.str`amount to be refunded`}
+ tooltip={i18n.str`Amount to be refunded`}
>
<i18n.Translate>Max refundable:</i18n.Translate>{" "}
{Amounts.stringify(totalRefundable)}
@@ -389,16 +389,16 @@ export function RefundModal({
values={[
i18n.str`Choose one...`,
duplicatedText,
- i18n.str`requested by the customer`,
- i18n.str`other`,
+ i18n.str`Requested by the customer`,
+ i18n.str`Other`,
]}
- tooltip={i18n.str`why this order is being refunded`}
+ tooltip={i18n.str`Why this order is being refunded`}
/>
{form.mainReason && form.mainReason !== duplicatedText ? (
<Input<State>
label={i18n.str`Description`}
name="description"
- tooltip={i18n.str`more information to give context`}
+ tooltip={i18n.str`More information to give context`}
/>
) : undefined}
</FormProvider>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
index 8a1f85b1c..787512e2a 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
@@ -26,9 +26,7 @@ import {
TalerMerchantApi,
assertUnreachable,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
@@ -64,27 +62,26 @@ export default function OrderList({ onCreate, onSelect }: Props): VNode {
const result = useInstanceOrders(filter, (d) =>
setFilter({ ...filter, position: d }),
);
- const { lib } = useSessionContext();
+ const { state, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- const { state } = useSessionContext();
if (!result) return <Loading />;
if (result instanceof TalerError) {
return <ErrorLoadingMerchant error={result} />;
}
if (result.type === "fail") {
- switch(result.case) {
+ switch (result.case) {
case HttpStatusCode.NotFound: {
return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
- assertUnreachable(result)
+ assertUnreachable(result);
}
}
}
@@ -113,8 +110,8 @@ export default function OrderList({ onCreate, onSelect }: Props): VNode {
return resp.type === "ok";
}}
onSelect={onSelect}
- description={i18n.str`jump to order with the given product ID`}
- placeholder={i18n.str`order id`}
+ description={i18n.str`Jump to order with the given product ID`}
+ placeholder={i18n.str`Order id`}
/>
<ListPage
@@ -160,17 +157,47 @@ export default function OrderList({ onCreate, onSelect }: Props): VNode {
onConfirm={(value) => {
lib.instance
.addRefund(state.token, orderToBeRefunded.order_id, value)
- .then(() =>
- setNotif({
- message: i18n.str`refund created successfully`,
- type: "SUCCESS",
- }),
- )
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Refund created successfully`,
+ type: "SUCCESS",
+ });
+ } else {
+ switch (resp.case) {
+ case HttpStatusCode.UnavailableForLegalReasons: {
+ setNotif({
+ message: i18n.str`Could not create the refund`,
+ type: "ERROR",
+ description: i18n.str`There are pending KYC requirements.`
+ });
+ return;
+ }
+ case HttpStatusCode.Unauthorized:
+ case HttpStatusCode.Forbidden:
+ case HttpStatusCode.NotFound:
+ case HttpStatusCode.Conflict:
+ case HttpStatusCode.Gone: {
+ setNotif({
+ message: i18n.str`Could not create the refund`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ return;
+ }
+ default: {
+ assertUnreachable(resp)
+ }
+
+ }
+
+ }
+ })
.catch((error) =>
setNotif({
- message: i18n.str`could not create the refund`,
+ message: i18n.str`Could not create the refund`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
}),
)
.then(() => setOrderToBeRefunded(undefined));
@@ -208,7 +235,7 @@ function RefundModalForTable({ id, onConfirm, onCancel }: RefundProps): VNode {
);
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
assertUnreachable(result);
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx
index a16817bab..31fc2ffd8 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/CreatePage.tsx
@@ -35,6 +35,7 @@ import {
import { Input } from "../../../../components/form/Input.js";
import { InputSelector } from "../../../../components/form/InputSelector.js";
import { InputWithAddon } from "../../../../components/form/InputWithAddon.js";
+import { undefinedIfEmpty } from "../../../../utils/table.js";
type Entity = TalerMerchantApi.OtpDeviceAddDetails;
@@ -53,34 +54,32 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
const [showKey, setShowKey] = useState(false);
- const errors: FormErrors<Entity> = {
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
otp_device_id: !state.otp_device_id
- ? i18n.str`required`
+ ? i18n.str`Required`
: !/[a-zA-Z0-9]*/.test(state.otp_device_id)
- ? i18n.str`no valid. only characters and numbers`
+ ? i18n.str`Invalid. Please enter characters and numbers only`
: undefined,
- otp_algorithm: !state.otp_algorithm ? i18n.str`required` : undefined,
+ otp_algorithm: !state.otp_algorithm ? i18n.str`Required` : undefined,
otp_key: !state.otp_key
- ? i18n.str`required`
+ ? i18n.str`Required`
: !isRfc3548Base32Charset(state.otp_key)
- ? i18n.str`just letters and numbers from 2 to 7`
+ ? i18n.str`Just letters and numbers from 2 to 7`
: state.otp_key.length !== 32
- ? i18n.str`size of the key should be 32`
+ ? i18n.str`The size of the key must be 32 characters`
: undefined,
otp_device_description: !state.otp_device_description
- ? i18n.str`required`
+ ? i18n.str`Required`
: !/[a-zA-Z0-9]*/.test(state.otp_device_description)
- ? i18n.str`no valid. only characters and numbers`
+ ? i18n.str`Invalid. Please enter characters and numbers only`
: undefined,
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submitForm = () => {
if (hasErrors) return Promise.reject();
- return onCreate(state as any);
+ return onCreate(state as TalerMerchantApi.OtpDeviceAddDetails);
};
return (
@@ -97,7 +96,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
<Input<Entity>
name="otp_device_id"
label={i18n.str`ID`}
- tooltip={i18n.str`Internal id on the system`}
+ tooltip={i18n.str`Internal ID on the system`}
/>
<Input<Entity>
name="otp_device_description"
@@ -107,20 +106,20 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
<InputSelector<Entity>
name="otp_algorithm"
label={i18n.str`Verification algorithm`}
- tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}
+ tooltip={i18n.str`Algorithm used to verify transaction in offline mode`}
values={algorithms}
toStr={(v) => algorithmsNames[v]}
fromStr={(v) => Number(v)}
/>
- {state.otp_algorithm ? (
+ {state.otp_algorithm ? (
<Fragment>
<InputWithAddon<Entity>
expand
name="otp_key"
label={i18n.str`Device key`}
inputType={showKey ? "text" : "password"}
- help="Be sure to be very hard to guess or use the random generator"
- tooltip={i18n.str`Your device need to have exactly the same value`}
+ help={i18n.str`Be sure to choose a password hard to guess, alternatively use the random generator`}
+ tooltip={i18n.str`Your device needs to match exactly the same value`}
fromStr={(v) => v.toUpperCase()}
addonAfterAction={() => {
setShowKey(!showKey);
@@ -136,7 +135,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
}
side={
<button
- data-tooltip={i18n.str`generate random secret key`}
+ data-tooltip={i18n.str`Generate random secret key`}
class="button is-info mr-3"
onClick={(e) => {
setState((s) => ({
@@ -146,7 +145,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
e.preventDefault();
}}
>
- <i18n.Translate>random</i18n.Translate>
+ <i18n.Translate>Random</i18n.Translate>
</button>
}
/>
@@ -165,7 +164,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
index 8ab0e1f26..476cd3ba9 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
@@ -36,14 +36,14 @@ interface Props {
}
export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
- const { lib: api } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- const [created, setCreated] = useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null)
+ const [created, setCreated] =
+ useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null);
if (created) {
- return <CreatedSuccessfully entity={created} onConfirm={onConfirm} />
+ return <CreatedSuccessfully entity={created} onConfirm={onConfirm} />;
}
return (
@@ -51,16 +51,29 @@ export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
<NotificationCard notification={notif} />
<CreatePage
onBack={onBack}
- onCreate={(request: Entity) => {
- return api.instance.addOtpDevice(state.token, request)
- .then((d) => {
- setCreated(request)
+ onCreate={async (request: Entity) => {
+ return lib.instance
+ .addOtpDevice(state.token, request)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Device added successfully`,
+ type: "SUCCESS",
+ });
+ setCreated(request);
+ } else {
+ setNotif({
+ message: i18n.str`Could not add device`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
})
.catch((error) => {
setNotif({
- message: i18n.str`could not create device`,
+ message: i18n.str`Could not add device`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/List.stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/List.stories.tsx
deleted file mode 100644
index 49032c80e..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/List.stories.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import { FunctionalComponent, h } from "preact";
-import { ListPage as TestedComponent } from "./ListPage.js";
-
-export default {
- title: "Pages/OtpDevices/List",
- component: TestedComponent,
-};
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx
deleted file mode 100644
index 8ca0a9c58..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/ListPage.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
-import { h, VNode } from "preact";
-import { CardTable } from "./Table.js";
-
-export interface Props {
- devices: TalerMerchantApi.OtpDeviceEntry[];
- onLoadMoreBefore?: () => void;
- onLoadMoreAfter?: () => void;
- onCreate: () => void;
- onDelete: (e: TalerMerchantApi.OtpDeviceEntry) => void;
- onSelect: (e: TalerMerchantApi.OtpDeviceEntry) => void;
-}
-
-export function ListPage({
- devices,
- onCreate,
- onDelete,
- onSelect,
- onLoadMoreBefore,
- onLoadMoreAfter,
-}: Props): VNode {
-
- return (
- <section class="section is-main-section">
- <CardTable
- devices={devices.map((o) => ({
- ...o,
- id: String(o.otp_device_id),
- }))}
- onCreate={onCreate}
- onDelete={onDelete}
- onSelect={onSelect}
- onLoadMoreBefore={onLoadMoreBefore}
- onLoadMoreAfter={onLoadMoreAfter}
- />
- </section>
- );
-}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx
index e4206ff7d..027644f7d 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/Table.tsx
@@ -54,12 +54,12 @@ export function CardTable({
<span class="icon">
<i class="mdi mdi-lock" />
</span>
- <i18n.Translate>OTP Devices</i18n.Translate>
+ <i18n.Translate>OTP devices</i18n.Translate>
</p>
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add new devices`}
+ data-tooltip={i18n.str`Add new devices`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -114,10 +114,10 @@ function Table({
{onLoadMoreBefore && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more devices before the first one`}
+ data-tooltip={i18n.str`Load more devices before the first one`}
onClick={onLoadMoreBefore}
>
- <i18n.Translate>load first page</i18n.Translate>
+ <i18n.Translate>Load first page</i18n.Translate>
</button>
)}
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -152,10 +152,10 @@ function Table({
<div class="buttons is-right">
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected devices from the database`}
+ data-tooltip={i18n.str`Delete selected devices from the database`}
onClick={() => onDelete(i)}
>
- Delete
+ <i18n.Translate>Delete</i18n.Translate>
</button>
</div>
</td>
@@ -167,10 +167,10 @@ function Table({
{onLoadMoreAfter && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more devices after the last one`}
+ data-tooltip={i18n.str`Load more devices after the last one`}
onClick={onLoadMoreAfter}
>
- <i18n.Translate>load next page</i18n.Translate>
+ <i18n.Translate>Load next page</i18n.Translate>
</button>
)}
</div>
@@ -188,7 +188,7 @@ function EmptyTable(): VNode {
</p>
<p>
<i18n.Translate>
- There is no devices yet, add more pressing the + sign
+ There are no devices to list yet, add more by pressing the + sign
</i18n.Translate>
</p>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
index b6a077863..f566ee2c2 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
@@ -23,11 +23,9 @@ import {
HttpStatusCode,
TalerError,
TalerMerchantApi,
- assertUnreachable
+ assertUnreachable,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
@@ -38,7 +36,7 @@ import { useInstanceOtpDevices } from "../../../../hooks/otp.js";
import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
-import { ListPage } from "./ListPage.js";
+import { CardTable } from "./Table.js";
interface Props {
onCreate: () => void;
@@ -49,8 +47,7 @@ export default function ListOtpDevices({ onCreate, onSelect }: Props): VNode {
// const [position, setPosition] = useState<string | undefined>(undefined);
const { i18n } = useTranslationContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const result = useInstanceOtpDevices();
if (!result) return <Loading />;
@@ -63,7 +60,7 @@ export default function ListOtpDevices({ onCreate, onSelect }: Props): VNode {
return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
assertUnreachable(result);
@@ -75,32 +72,42 @@ export default function ListOtpDevices({ onCreate, onSelect }: Props): VNode {
<Fragment>
<NotificationCard notification={notif} />
- <ListPage
- devices={result.body.otp_devices}
- onLoadMoreBefore={undefined} //result.isFirstPage ? undefined : result.loadFirst}
- onLoadMoreAfter={undefined} //result.isLastPage ? undefined : result.loadNext}
- onCreate={onCreate}
- onSelect={(e) => {
- onSelect(e.otp_device_id);
- }}
- onDelete={(e: TalerMerchantApi.OtpDeviceEntry) => {
- return lib.instance
- .deleteOtpDevice(state.token, e.otp_device_id)
- .then(() =>
- setNotif({
- message: i18n.str`validator delete successfully`,
- type: "SUCCESS",
- }),
- )
- .catch((error) =>
- setNotif({
- message: i18n.str`could not delete the validator`,
- type: "ERROR",
- description: error.message,
- }),
- );
- }}
- />
+ <section class="section is-main-section">
+ <CardTable
+ devices={result.body.otp_devices}
+ onLoadMoreBefore={undefined} //result.isFirstPage ? undefined : result.loadFirst}
+ onLoadMoreAfter={undefined} //result.isLastPage ? undefined : result.loadNext}
+ onCreate={onCreate}
+ onSelect={(e) => {
+ onSelect(e.otp_device_id);
+ }}
+ onDelete={async (e: TalerMerchantApi.OtpDeviceEntry) => {
+ return lib.instance
+ .deleteOtpDevice(state.token, e.otp_device_id)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Device delete successfully`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Could not delete the device`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
+ .catch((error) =>
+ setNotif({
+ message: i18n.str`Could not delete the device`,
+ type: "ERROR",
+ description: error instanceof Error ? error.message : String(error),
+ }),
+ );
+ }}
+ />
+ </section>
</Fragment>
);
}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx
index 7866b9cd9..68fbf371a 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx
@@ -19,15 +19,15 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { randomRfc3548Base32Key, TalerMerchantApi } from "@gnu-taler/taler-util";
+import {
+ randomRfc3548Base32Key,
+ TalerMerchantApi,
+} from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, h, VNode } from "preact";
import { useState } from "preact/hooks";
import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
-import {
- FormErrors,
- FormProvider,
-} from "../../../../components/form/FormProvider.js";
+import { FormProvider } from "../../../../components/form/FormProvider.js";
import { Input } from "../../../../components/form/Input.js";
import { InputSelector } from "../../../../components/form/InputSelector.js";
import { InputWithAddon } from "../../../../components/form/InputWithAddon.js";
@@ -48,15 +48,8 @@ export function UpdatePage({ device, onUpdate, onBack }: Props): VNode {
const [state, setState] = useState<Partial<Entity>>(device);
const [showKey, setShowKey] = useState(false);
- const errors: FormErrors<Entity> = {};
-
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
-
const submitForm = () => {
- if (hasErrors) return Promise.reject();
- return onUpdate(state as any);
+ return onUpdate(state as Entity);
};
return (
@@ -68,7 +61,8 @@ export function UpdatePage({ device, onUpdate, onBack }: Props): VNode {
<div class="level-left">
<div class="level-item">
<span class="is-size-4">
- Device: <b>{device.id}</b>
+ <i18n.Translate>Device:</i18n.Translate>
+ <b>{device.id}</b>
</span>
</div>
</div>
@@ -80,11 +74,7 @@ export function UpdatePage({ device, onUpdate, onBack }: Props): VNode {
<section class="section is-main-section">
<div class="columns">
<div class="column is-four-fifths">
- <FormProvider
- object={state}
- valueHandler={setState}
- errors={errors}
- >
+ <FormProvider object={state} valueHandler={setState}>
<Input<Entity>
name="otp_device_description"
label={i18n.str`Description`}
@@ -107,8 +97,8 @@ export function UpdatePage({ device, onUpdate, onBack }: Props): VNode {
inputType={showKey ? "text" : "password"}
help={
state.otp_key === undefined
- ? "Not modified"
- : "Be sure to be very hard to guess or use the random generator"
+ ? i18n.str`Not modified`
+ : i18n.str`Be sure to be very hard to guess or use the random generator`
}
tooltip={i18n.str`Your device need to have exactly the same value`}
fromStr={(v) => v.toUpperCase()}
@@ -132,25 +122,25 @@ export function UpdatePage({ device, onUpdate, onBack }: Props): VNode {
side={
state.otp_key === undefined ? (
<button
- onClick={(e) => {
+ onClick={() => {
setState((s) => ({ ...s, otp_key: "" }));
}}
class="button"
>
- change key
+ <i18n.Translate>Change key</i18n.Translate>
</button>
) : (
<button
- data-tooltip={i18n.str`generate random secret key`}
+ data-tooltip={i18n.str`Generate random secret key`}
class="button is-info mr-3"
- onClick={(e) => {
+ onClick={() => {
setState((s) => ({
...s,
otp_key: randomRfc3548Base32Key(),
}));
}}
>
- <i18n.Translate>random</i18n.Translate>
+ <i18n.Translate>Random</i18n.Translate>
</button>
)
}
@@ -166,12 +156,8 @@ export function UpdatePage({ device, onUpdate, onBack }: Props): VNode {
</button>
)}
<AsyncButton
- disabled={hasErrors}
- data-tooltip={
- hasErrors
- ? i18n.str`Need to complete marked fields`
- : "confirm operation"
- }
+ disabled={false}
+ data-tooltip={i18n.str`Confirm operation`}
onClick={submitForm}
>
<i18n.Translate>Confirm</i18n.Translate>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx
index 2fe3abaae..8f9997cfb 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/index.tsx
@@ -58,8 +58,7 @@ export default function UpdateValidator({
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const [keyUpdated, setKeyUpdated] =
useState<TalerMerchantApi.OtpDeviceAddDetails | null>(null);
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const { i18n } = useTranslationContext();
@@ -136,9 +135,9 @@ export default function UpdateValidator({
})
.catch((error) => {
setNotif({
- message: i18n.str`could not update template`,
+ message: i18n.str`Could not update template`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx b/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx
deleted file mode 100644
index 2b6ebed45..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-import { h, VNode } from "preact";
-import { CreatedSuccessfully as Template } from "../../../../components/notifications/CreatedSuccessfully.js";
-import { Entity } from "./index.js";
-import emptyImage from "../../assets/empty.png";
-
-interface Props {
- entity: Entity;
- onConfirm: () => void;
- onCreateAnother?: () => void;
-}
-
-export function CreatedSuccessfully({
- entity,
- onConfirm,
- onCreateAnother,
-}: Props): VNode {
- return (
- <Template onConfirm={onConfirm} onCreateAnother={onCreateAnother}>
- <div class="field is-horizontal">
- <div class="field-label is-normal">
- <label class="label">Image</label>
- </div>
- <div class="field-body is-flex-grow-3">
- <div class="field">
- <p class="control">
- <img src={entity.image} style={{ width: 200, height: 200 }} />
- </p>
- </div>
- </div>
- </div>
- <div class="field is-horizontal">
- <div class="field-label is-normal">
- <label class="label">Description</label>
- </div>
- <div class="field-body is-flex-grow-3">
- <div class="field">
- <p class="control">
- <textarea class="input" readonly value={entity.description} />
- </p>
- </div>
- </div>
- </div>
- <div class="field is-horizontal">
- <div class="field-label is-normal">
- <label class="label">Price</label>
- </div>
- <div class="field-body is-flex-grow-3">
- <div class="field">
- <p class="control">
- <input class="input" readonly value={entity.price} />
- </p>
- </div>
- </div>
- </div>
- </Template>
- );
-}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
index 9de5cae78..f7c462647 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
@@ -34,8 +34,7 @@ interface Props {
onConfirm: () => void;
}
export default function CreateProduct({ onConfirm, onBack }: Props): VNode {
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
@@ -45,13 +44,28 @@ export default function CreateProduct({ onConfirm, onBack }: Props): VNode {
<CreatePage
onBack={onBack}
onCreate={(request: TalerMerchantApi.ProductAddDetail) => {
- return lib.instance.addProduct(state.token, request)
- .then(() => onConfirm())
+ return lib.instance
+ .addProduct(state.token, request)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Product created successfully`,
+ type: "SUCCESS",
+ });
+ onConfirm();
+ } else {
+ setNotif({
+ message: i18n.str`Could not create product`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not create product`,
+ message: i18n.str`Could not create product`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
index 580a92cdc..ca0b62704 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
@@ -43,20 +43,20 @@ function createExample<Props>(
return r;
}
-export const Example = createExample(TestedComponent, {
- instances: [
- {
- id: "orderid",
- description: "description1",
- description_i18n: {} as any,
- image: "",
- price: "TESTKUDOS:10" as AmountString,
- taxes: [],
- total_lost: 10,
- total_sold: 5,
- total_stock: 15,
- unit: "bar",
- address: {},
- },
- ],
-});
+// export const Example = createExample(TestedComponent, {
+// instances: [
+// {
+// id: "orderid",
+// description: "description1",
+// description_i18n: {} as any,
+// image: "",
+// price: "TESTKUDOS:10" as AmountString,
+// taxes: [],
+// total_lost: 10,
+// total_sold: 5,
+// total_stock: 15,
+// unit: "bar",
+// address: {},
+// },
+// ],
+// });
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
index 08d42a8c9..b4323541a 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
@@ -28,10 +28,14 @@ import emptyImage from "../../../../assets/empty.png";
import {
FormErrors,
FormProvider,
+ TalerForm,
} from "../../../../components/form/FormProvider.js";
import { InputCurrency } from "../../../../components/form/InputCurrency.js";
import { InputNumber } from "../../../../components/form/InputNumber.js";
-import { dateFormatForSettings, usePreference } from "../../../../hooks/preference.js";
+import {
+ dateFormatForSettings,
+ usePreference,
+} from "../../../../hooks/preference.js";
import { WithId } from "../../../../declaration.js";
type Entity = TalerMerchantApi.ProductDetail & WithId;
@@ -57,7 +61,7 @@ export function CardTable({
onUpdate,
onDelete,
onLoadMoreAfter,
- onLoadMoreBefore
+ onLoadMoreBefore,
}: Props): VNode {
const [rowSelection, rowSelectionHandler] = useState<string | undefined>(
undefined,
@@ -75,7 +79,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add product to inventory`}
+ data-tooltip={i18n.str`Add product to inventory`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -130,7 +134,7 @@ function Table({
onUpdate,
onDelete,
onLoadMoreAfter,
- onLoadMoreBefore
+ onLoadMoreBefore,
}: TableProps): VNode {
const { i18n } = useTranslationContext();
const [settings] = usePreference();
@@ -138,7 +142,7 @@ function Table({
<div class="table-container">
{onLoadMoreBefore && (
<button class="button is-fullwidth" onClick={onLoadMoreBefore}>
- <i18n.Translate>load first page</i18n.Translate>
+ <i18n.Translate>Load first page</i18n.Translate>
</button>
)}
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -175,9 +179,9 @@ function Table({
: i.next_restock.t_s === "never"
? "never"
: `restock at ${format(
- new Date(i.next_restock.t_s * 1000),
- dateFormatForSettings(settings),
- )}`;
+ new Date(i.next_restock.t_s * 1000),
+ dateFormatForSettings(settings),
+ )}`;
let stockInfo: ComponentChildren = "";
if (i.total_stock < 0) {
stockInfo = "infinite";
@@ -219,7 +223,9 @@ function Table({
}
style={{ cursor: "pointer" }}
>
- {i.description.length > 30 ? i.description.substring(0, 30) + "..." : i.description}
+ {i.description.length > 30
+ ? i.description.substring(0, 30) + "..."
+ : i.description}
</td>
<td
onClick={() =>
@@ -227,7 +233,7 @@ function Table({
}
style={{ cursor: "pointer" }}
>
- {isFree ? i18n.str`free` : `${i.price} / ${i.unit}`}
+ {isFree ? i18n.str`Free` : `${i.price} / ${i.unit}`}
</td>
<td
onClick={() =>
@@ -259,8 +265,7 @@ function Table({
}
style={{ cursor: "pointer" }}
>
- <span style={{ "whiteSpace": "nowrap" }}>
-
+ <span style={{ whiteSpace: "nowrap" }}>
{i.total_sold} {i.unit}
</span>
</td>
@@ -268,7 +273,7 @@ function Table({
<div class="buttons is-right">
<span
class="has-tooltip-bottom"
- data-tooltip={i18n.str`go to product update page`}
+ data-tooltip={i18n.str`Go to product update page`}
>
<button
class="button is-small is-success "
@@ -280,7 +285,7 @@ function Table({
</span>
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`remove this product from the database`}
+ data-tooltip={i18n.str`Remove this product from the database`}
>
<button
class="button is-small is-danger"
@@ -314,10 +319,12 @@ function Table({
</tbody>
</table>
{onLoadMoreAfter && (
- <button class="button is-fullwidth"
- data-tooltip={i18n.str`load more products after the last one`}
- onClick={onLoadMoreAfter}>
- <i18n.Translate>load next page</i18n.Translate>
+ <button
+ class="button is-fullwidth"
+ data-tooltip={i18n.str`Load more products after the last one`}
+ onClick={onLoadMoreAfter}
+ >
+ <i18n.Translate>Load next page</i18n.Translate>
</button>
)}
</div>
@@ -326,12 +333,10 @@ function Table({
interface FastProductUpdateFormProps {
product: Entity;
- onUpdate: (
- data: TalerMerchantApi.ProductPatchDetail,
- ) => Promise<void>;
+ onUpdate: (data: TalerMerchantApi.ProductPatchDetail) => Promise<void>;
onCancel: () => void;
}
-interface FastProductUpdate {
+interface FastProductUpdate extends TalerForm {
incoming: number;
lost: number;
price: string;
@@ -358,19 +363,18 @@ function FastProductWithInfiniteStockUpdateForm({
<InputCurrency<FastProductUpdate>
name="price"
label={i18n.str`Price`}
- tooltip={i18n.str`update the product with new price`}
+ tooltip={i18n.str`Update the product with new price`}
/>
</FormProvider>
<div class="buttons is-expanded">
-
<div class="buttons is-right mt-5">
<button class="button" onClick={onCancel}>
<i18n.Translate>Cancel</i18n.Translate>
</button>
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`update product with new price`}
+ data-tooltip={i18n.str`Update product with new price`}
>
<button
class="button is-info"
@@ -400,6 +404,7 @@ function FastProductWithManagedStockUpdateForm({
lost: 0,
price: product.price,
});
+ const { i18n } = useTranslationContext();
const currentStock =
product.total_stock - product.total_sold - product.total_lost;
@@ -407,15 +412,15 @@ function FastProductWithManagedStockUpdateForm({
const errors: FormErrors<FastProductUpdate> = {
lost:
currentStock + value.incoming < value.lost
- ? `lost cannot be greater that current + incoming (max ${currentStock + value.incoming
- })`
+ ? i18n.str`lost can't be greater that current + incoming (max ${
+ currentStock + value.incoming
+ })`
: undefined,
};
const hasErrors = Object.keys(errors).some(
- (k) => (errors as Record<string,unknown>)[k] !== undefined,
+ (k) => (errors as Record<string, unknown>)[k] !== undefined,
);
- const { i18n } = useTranslationContext();
return (
<Fragment>
@@ -428,17 +433,17 @@ function FastProductWithManagedStockUpdateForm({
<InputNumber<FastProductUpdate>
name="incoming"
label={i18n.str`Incoming`}
- tooltip={i18n.str`add more elements to the inventory`}
+ tooltip={i18n.str`Add more elements to the inventory`}
/>
<InputNumber<FastProductUpdate>
name="lost"
label={i18n.str`Lost`}
- tooltip={i18n.str`report elements lost in the inventory`}
+ tooltip={i18n.str`Report elements lost in the inventory`}
/>
<InputCurrency<FastProductUpdate>
name="price"
label={i18n.str`Price`}
- tooltip={i18n.str`new price for the product`}
+ tooltip={i18n.str`New price for the product`}
/>
</FormProvider>
@@ -450,8 +455,8 @@ function FastProductWithManagedStockUpdateForm({
class="has-tooltip-left"
data-tooltip={
hasErrors
- ? i18n.str`the are value with errors`
- : i18n.str`update product with new stock and price`
+ ? i18n.str`The are value with errors`
+ : i18n.str`Update product with new stock and price`
}
>
<button
@@ -493,7 +498,7 @@ function EmptyTable(): VNode {
</p>
<p>
<i18n.Translate>
- There is no products yet, add more pressing the + sign
+ There are no products to list yet, add more by pressing the + sign
</i18n.Translate>
</p>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
index dc3e73850..8755e7338 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
@@ -19,10 +19,13 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
@@ -31,9 +34,7 @@ import { JumpToElementById } from "../../../../components/form/JumpToElementById
import { NotificationCard } from "../../../../components/menu/index.js";
import { ConfirmModal } from "../../../../components/modal/index.js";
import { useSessionContext } from "../../../../context/session.js";
-import {
- useInstanceProducts
-} from "../../../../hooks/product.js";
+import { useInstanceProducts } from "../../../../hooks/product.js";
import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
@@ -44,15 +45,12 @@ interface Props {
onCreate: () => void;
onSelect: (id: string) => void;
}
-export default function ProductList({
- onCreate,
- onSelect,
-}: Props): VNode {
+export default function ProductList({ onCreate, onSelect }: Props): VNode {
const result = useInstanceProducts();
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
- const [deleting, setDeleting] =
- useState<TalerMerchantApi.ProductDetail & WithId | null>(null);
+ const { state, lib } = useSessionContext();
+ const [deleting, setDeleting] = useState<
+ (TalerMerchantApi.ProductDetail & WithId) | null
+ >(null);
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
@@ -67,7 +65,7 @@ export default function ProductList({
return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
assertUnreachable(result);
@@ -85,8 +83,8 @@ export default function ProductList({
return resp.type === "ok";
}}
onSelect={onSelect}
- description={i18n.str`jump to product with the given product ID`}
- placeholder={i18n.str`product id`}
+ description={i18n.str`Jump to product with the given product ID`}
+ placeholder={i18n.str`Product id`}
/>
<CardTable
@@ -96,19 +94,31 @@ export default function ProductList({
onCreate={onCreate}
onUpdate={async (id, prod) => {
try {
- await lib.instance.updateProduct(state.token, id, prod);
- setNotif({
- message: i18n.str`product updated successfully`,
- type: "SUCCESS",
- });
+ const resp = await lib.instance.updateProduct(
+ state.token,
+ id,
+ prod,
+ );
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Product updated successfully`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Could not update the product`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
} catch (error) {
setNotif({
- message: i18n.str`could not update the product`,
+ message: i18n.str`Could not update the product`,
type: "ERROR",
description: error instanceof Error ? error.message : undefined,
});
}
- return
+ return;
}}
onSelect={(product) => onSelect(product.id)}
onDelete={(prod: TalerMerchantApi.ProductDetail & WithId) =>
@@ -125,14 +135,25 @@ export default function ProductList({
onCancel={() => setDeleting(null)}
onConfirm={async (): Promise<void> => {
try {
- await lib.instance.deleteProduct(state.token, deleting.id);
- setNotif({
- message: i18n.str`Product "${deleting.description}" (ID: ${deleting.id}) has been deleted`,
- type: "SUCCESS",
- });
+ const resp = await lib.instance.deleteProduct(
+ state.token,
+ deleting.id,
+ );
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Product "${deleting.description}" (ID: ${deleting.id}) has been deleted`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Could not delete the product`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
} catch (error) {
setNotif({
- message: i18n.str`Failed to delete product`,
+ message: i18n.str`Could not delete the product`,
type: "ERROR",
description: error instanceof Error ? error.message : undefined,
});
@@ -141,11 +162,17 @@ export default function ProductList({
}}
>
<p>
- If you delete the product named <b>&quot;{deleting.description}&quot;</b> (ID:{" "}
- <b>{deleting.id}</b>), the stock and related information will be lost
+ <i18n.Translate>
+ If you delete the product named{" "}
+ <b>&quot;{deleting.description}&quot;</b> (ID:{" "}
+ <b>{deleting.id}</b>
+ ), the stock and related information will be lost
+ </i18n.Translate>
</p>
<p class="warning">
- Deleting an product <b>cannot be undone</b>.
+ <i18n.Translate>
+ Deleting an product can't be undone.
+ </i18n.Translate>
</p>
</ConfirmModal>
)}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
index 7aa93b186..889ea1b26 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
@@ -41,34 +41,34 @@ function createExample<Props>(
return r;
}
-export const WithManagedStock = createExample(TestedComponent, {
- product: {
- product_id: "20102-ASDAS-QWE",
- description: "description1",
- description_i18n: {} as any,
- image: "",
- price: "TESTKUDOS:10" as AmountString,
- taxes: [],
- total_lost: 10,
- total_sold: 5,
- total_stock: 15,
- unit: "bar",
- address: {},
- },
-});
+// export const WithManagedStock = createExample(TestedComponent, {
+// product: {
+// product_id: "20102-ASDAS-QWE",
+// description: "description1",
+// description_i18n: {} as any,
+// image: "",
+// price: "TESTKUDOS:10" as AmountString,
+// taxes: [],
+// total_lost: 10,
+// total_sold: 5,
+// total_stock: 15,
+// unit: "bar",
+// address: {},
+// },
+// });
-export const WithInfiniteStock = createExample(TestedComponent, {
- product: {
- product_id: "20102-ASDAS-QWE",
- description: "description1",
- description_i18n: {} as any,
- image: "",
- price: "TESTKUDOS:10" as AmountString,
- taxes: [],
- total_lost: 10,
- total_sold: 5,
- total_stock: -1,
- unit: "bar",
- address: {},
- },
-});
+// export const WithInfiniteStock = createExample(TestedComponent, {
+// product: {
+// product_id: "20102-ASDAS-QWE",
+// description: "description1",
+// description_i18n: {} as any,
+// image: "",
+// price: "TESTKUDOS:10" as AmountString,
+// taxes: [],
+// total_lost: 10,
+// total_sold: 5,
+// total_stock: -1,
+// unit: "bar",
+// address: {},
+// },
+// });
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
index 5e3e58d80..56626cfa8 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
@@ -48,9 +48,8 @@ export default function UpdateProduct({
}: Props): VNode {
const result = useProductDetails(pid);
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
-
+ const { state, lib } = useSessionContext();
+
const { i18n } = useTranslationContext();
if (!result) return <Loading />;
@@ -71,6 +70,7 @@ export default function UpdateProduct({
}
}
+
return (
<Fragment>
<NotificationCard notification={notif} />
@@ -79,12 +79,27 @@ export default function UpdateProduct({
onBack={onBack}
onUpdate={(data) => {
return lib.instance.updateProduct(state.token, pid, data)
- .then(onConfirm)
+ .then(resp => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Product (ID: ${pid}) has been updated`,
+ type: "SUCCESS",
+ });
+ onConfirm()
+ } else {
+ setNotif({
+ message: i18n.str`Could not update product`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not create product`,
+ message: i18n.str`Could not update product`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx
index 336a336ed..76eb8f9e8 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/CreatePage.tsx
@@ -27,9 +27,7 @@ import {
TalerMerchantApi,
TranslatedString,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
@@ -69,8 +67,7 @@ interface Props {
export function CreatePage({ onCreate, onBack }: Props): VNode {
const { i18n } = useTranslationContext();
- const { config } = useSessionContext();
- const { state: session } = useSessionContext();
+ const { config, state: session } = useSessionContext();
const devices = useInstanceOtpDevices();
const [state, setState] = useState<Partial<Entity>>({
@@ -94,28 +91,32 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
const errors: FormErrors<Entity> = {
id: !state.id
- ? i18n.str`should not be empty`
+ ? i18n.str`Required`
: !/[a-zA-Z0-9]*/.test(state.id)
- ? i18n.str`no valid. only characters and numbers`
+ ? i18n.str`Invalid. Please enter characters and numbers only`
: undefined,
- description: !state.description ? i18n.str`should not be empty` : undefined,
+ description: !state.description ? i18n.str`Required` : undefined,
amount: !state.amount
- ? state.amount_editable ? undefined : i18n.str`required`
+ ? state.amount_editable
+ ? undefined
+ : i18n.str`Required`
: !parsedPrice
- ? i18n.str`not valid`
+ ? i18n.str`Invalid`
: Amounts.isZero(parsedPrice)
- ? state.amount_editable ? undefined : i18n.str`must be greater than 0`
+ ? state.amount_editable
+ ? undefined
+ : i18n.str`Must be greater than 0`
: undefined,
minimum_age:
state.minimum_age && state.minimum_age < 0
- ? i18n.str`should be greater that 0`
+ ? i18n.str`Must be greater that 0`
: undefined,
pay_duration: !state.pay_duration
- ? i18n.str`can't be empty`
+ ? i18n.str`Required`
: state.pay_duration.d_ms === "forever"
? undefined
: state.pay_duration.d_ms < 1000 //less than one second
- ? i18n.str`to short`
+ ? i18n.str`Too short`
: undefined,
};
@@ -125,12 +126,14 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
(k) => (errors as Record<string, unknown>)[k] !== undefined,
);
- const zero = Amounts.stringify(Amounts.zeroOfCurrency(config.currency))
+ const zero = Amounts.stringify(Amounts.zeroOfCurrency(config.currency));
const submitForm = () => {
if (hasErrors) return Promise.reject();
- const contract_amount = state.amount_editable ? undefined : state.amount as AmountString
- const contract_summary = state.summary_editable ? undefined : state.summary
+ const contract_amount = state.amount_editable
+ ? undefined
+ : (state.amount as AmountString);
+ const contract_summary = state.summary_editable ? undefined : state.summary;
const template_contract: TalerMerchantApi.TemplateContractDetails = {
minimum_age: state.minimum_age!,
pay_duration: Duration.toTalerProtocolDuration(state.pay_duration!),
@@ -140,14 +143,14 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
cList.length > 1 && state.currency_editable
? undefined
: config.currency,
- }
+ };
return onCreate({
template_id: state.id!,
template_description: state.description!,
template_contract,
editable_defaults: {
- amount: !state.amount_editable ? undefined : (state.amount ?? zero),
- summary: !state.summary_editable ? undefined : (state.summary ?? ""),
+ amount: !state.amount_editable ? undefined : state.amount ?? zero,
+ summary: !state.summary_editable ? undefined : state.summary ?? "",
currency:
cList.length === 1 || !state.currency_editable
? undefined
@@ -181,7 +184,10 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
<InputWithAddon<Entity>
name="id"
help={
- new URL(`templates/${state.id ?? ""}`, session.backendUrl.href).href
+ new URL(
+ `templates/${state.id ?? ""}`,
+ session.backendUrl.href,
+ ).href
}
label={i18n.str`Identifier`}
tooltip={i18n.str`Name of the template in URLs.`}
@@ -197,7 +203,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
name="summary"
inputType="multiline"
label={i18n.str`Summary`}
- tooltip={i18n.str`If specified, this template will create order with the same summary`}
+ tooltip={i18n.str`If specified here, this template will create orders with the same summary`}
/>
<InputToggle<Entity>
name="summary_editable"
@@ -208,7 +214,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
<InputCurrency<Entity>
name="amount"
label={i18n.str`Amount`}
- tooltip={i18n.str`If specified, this template will create order with the same price`}
+ tooltip={i18n.str`If specified here, this template will create orders with the same price`}
/>
<InputToggle<Entity>
name="amount_editable"
@@ -224,7 +230,9 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
tooltip={i18n.str`Allow the user to change currency.`}
/>
<TextField name="sc" label={i18n.str`Supported currencies`}>
- <i18n.Translate>supported currencies: {cList.join(", ")}</i18n.Translate>
+ <i18n.Translate>
+ Supported currencies: {cList.join(", ")}
+ </i18n.Translate>
</TextField>
</Fragment>
)}
@@ -238,7 +246,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
name="pay_duration"
label={i18n.str`Payment timeout`}
help=""
- tooltip={i18n.str`How much time has the customer to complete the payment once the order was created.`}
+ tooltip={i18n.str`How much time the customer has to complete the payment once the order was created.`}
/>
{!deviceList.length ? (
<TextField
@@ -281,7 +289,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
index 499c7c859..bc615c8b8 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
@@ -28,15 +28,13 @@ import { useSessionContext } from "../../../../context/session.js";
import { Notification } from "../../../../utils/types.js";
import { CreatePage } from "./CreatePage.js";
-export type Entity = TalerMerchantApi.TransferInformation;
interface Props {
onBack?: () => void;
onConfirm: () => void;
}
-export default function CreateTransfer({ onConfirm, onBack }: Props): VNode {
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+export default function CreateTemplate({ onConfirm, onBack }: Props): VNode {
+ const { state, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
@@ -45,14 +43,29 @@ export default function CreateTransfer({ onConfirm, onBack }: Props): VNode {
<NotificationCard notification={notif} />
<CreatePage
onBack={onBack}
- onCreate={(request: TalerMerchantApi.TemplateAddDetails) => {
- return lib.instance.addTemplate(state.token, request)
- .then(() => onConfirm())
+ onCreate={async (request: TalerMerchantApi.TemplateAddDetails) => {
+ return lib.instance
+ .addTemplate(state.token, request)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Template has been created`,
+ type: "SUCCESS",
+ });
+ onConfirm();
+ } else {
+ setNotif({
+ message: i18n.str`Could not create template`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not inform template`,
+ message: i18n.str`Could not create template`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx
deleted file mode 100644
index 66d8a2f7e..000000000
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/ListPage.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
-import { h, VNode } from "preact";
-import { CardTable } from "./Table.js";
-
-export interface Props {
- templates: TalerMerchantApi.TemplateEntry[];
- onLoadMoreBefore?: () => void;
- onLoadMoreAfter?: () => void;
- onCreate: () => void;
- onDelete: (e: TalerMerchantApi.TemplateEntry) => void;
- onSelect: (e: TalerMerchantApi.TemplateEntry) => void;
- onNewOrder: (e: TalerMerchantApi.TemplateEntry) => void;
- onQR: (e: TalerMerchantApi.TemplateEntry) => void;
-}
-
-export function ListPage({
- templates,
- onCreate,
- onDelete,
- onSelect,
- onNewOrder,
- onQR,
- onLoadMoreBefore,
- onLoadMoreAfter,
-}: Props): VNode {
-
- return (
- <CardTable
- templates={templates.map((o) => ({
- ...o,
- id: String(o.template_id),
- }))}
- onQR={onQR}
- onCreate={onCreate}
- onDelete={onDelete}
- onSelect={onSelect}
- onNewOrder={onNewOrder}
- onLoadMoreBefore={onLoadMoreBefore}
- onLoadMoreAfter={onLoadMoreAfter}
- />
- );
-}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx
index 4c55bae2a..82792579b 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/Table.tsx
@@ -63,7 +63,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add new templates`}
+ data-tooltip={i18n.str`Add new templates`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -124,10 +124,10 @@ function Table({
{onLoadMoreBefore && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more templates before the first one`}
+ data-tooltip={i18n.str`Load more templates before the first one`}
onClick={onLoadMoreBefore}
>
- <i18n.Translate>load first page</i18n.Translate>
+ <i18n.Translate>Load first page</i18n.Translate>
</button>
)}
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -162,21 +162,21 @@ function Table({
<div class="buttons is-right">
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected templates from the database`}
+ data-tooltip={i18n.str`Delete selected templates from the database`}
onClick={() => onDelete(i)}
>
- Delete
+ <i18n.Translate>Delete</i18n.Translate>
</button>
<button
class="button is-info is-small has-tooltip-left"
- data-tooltip={i18n.str`use template to create new order`}
+ data-tooltip={i18n.str`Use template to create new order`}
onClick={() => onNewOrder(i)}
>
- Use template
+ <i18n.Translate>Use template</i18n.Translate>
</button>
<button
class="button is-info is-small has-tooltip-left"
- data-tooltip={i18n.str`create qr code for the template`}
+ data-tooltip={i18n.str`Create qr code for the template`}
onClick={() => onQR(i)}
>
QR
@@ -191,10 +191,10 @@ function Table({
{onLoadMoreAfter && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more templates after the last one`}
+ data-tooltip={i18n.str`Load more templates after the last one`}
onClick={onLoadMoreAfter}
>
- <i18n.Translate>load next page</i18n.Translate>
+ <i18n.Translate>Load next page</i18n.Translate>
</button>
)}
</div>
@@ -212,7 +212,7 @@ function EmptyTable(): VNode {
</p>
<p>
<i18n.Translate>
- There is no templates yet, add more pressing the + sign
+ There are no templates to list yet, add more by pressing the + sign
</i18n.Translate>
</p>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
index 4fe11bf5c..6c79c47ff 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
@@ -19,10 +19,13 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
@@ -31,13 +34,11 @@ import { JumpToElementById } from "../../../../components/form/JumpToElementById
import { NotificationCard } from "../../../../components/menu/index.js";
import { ConfirmModal } from "../../../../components/modal/index.js";
import { useSessionContext } from "../../../../context/session.js";
-import {
- useInstanceTemplates
-} from "../../../../hooks/templates.js";
+import { useInstanceTemplates } from "../../../../hooks/templates.js";
import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
-import { ListPage } from "./ListPage.js";
+import { CardTable } from "./Table.js";
interface Props {
onCreate: () => void;
@@ -59,20 +60,20 @@ export default function ListTemplates({
const [deleting, setDeleting] =
useState<TalerMerchantApi.TemplateEntry | null>(null);
- if (!result) return <Loading />
+ if (!result) return <Loading />;
if (result instanceof TalerError) {
- return <ErrorLoadingMerchant error={result} />
+ return <ErrorLoadingMerchant error={result} />;
}
if (result.type === "fail") {
- switch(result.case) {
+ switch (result.case) {
case HttpStatusCode.NotFound: {
- return <NotFoundPageOrAdminCreate />
+ return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
- assertUnreachable(result)
+ assertUnreachable(result);
}
}
}
@@ -83,25 +84,21 @@ export default function ListTemplates({
<JumpToElementById
testIfExist={async (id) => {
- const resp = await lib.instance.getTemplateDetails(state.token, id)
- return resp.type === "ok"
+ const resp = await lib.instance.getTemplateDetails(state.token, id);
+ return resp.type === "ok";
}}
onSelect={onSelect}
- description={i18n.str`jump to template with the given template ID`}
- placeholder={i18n.str`template id`}
+ description={i18n.str`Jump to template with the given template ID`}
+ placeholder={i18n.str`Template identification`}
/>
- <ListPage
- // templates={result.body}
- // onLoadMoreBefore={
- // result.isFirstPage ? undefined: result.loadFirst
- // }
- // onLoadMoreAfter={result.isLastPage ? undefined : result.loadNext}
-
- templates={result.body.templates}
+ <CardTable
+ templates={result.body.templates.map((o) => ({
+ ...o,
+ id: String(o.template_id),
+ }))}
onLoadMoreBefore={undefined}
onLoadMoreAfter={undefined}
-
onCreate={onCreate}
onSelect={(e) => {
onSelect(e.template_id);
@@ -113,9 +110,8 @@ export default function ListTemplates({
onQR(e.template_id);
}}
onDelete={(e: TalerMerchantApi.TemplateEntry) => {
- setDeleting(e)
- }
- }
+ setDeleting(e);
+ }}
/>
{deleting && (
@@ -127,11 +123,22 @@ export default function ListTemplates({
onCancel={() => setDeleting(null)}
onConfirm={async (): Promise<void> => {
try {
- await lib.instance.deleteTemplate(state.token, deleting.template_id);
- setNotif({
- message: i18n.str`Template "${deleting.template_description}" (ID: ${deleting.template_id}) has been deleted`,
- type: "SUCCESS",
- });
+ const resp = await lib.instance.deleteTemplate(
+ state.token,
+ deleting.template_id,
+ );
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Template "${deleting.template_description}" (ID: ${deleting.template_id}) has been deleted`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Failed to delete template`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
} catch (error) {
setNotif({
message: i18n.str`Failed to delete template`,
@@ -143,11 +150,18 @@ export default function ListTemplates({
}}
>
<p>
- If you delete the template <b>&quot;{deleting.template_description}&quot;</b> (ID:{" "}
- <b>{deleting.template_id}</b>) you may loose information
+ <i18n.Translate>
+ If you delete the template{" "}
+ <b>&quot;{deleting.template_description}&quot;</b> (ID:{" "}
+ <b>{deleting.template_id}</b>) you may loose information
+ </i18n.Translate>
</p>
<p class="warning">
- Deleting an template <b>cannot be undone</b>.
+ <i18n.Translate>Deleting an template </i18n.Translate>
+ <b>
+ <i18n.Translate>can't be undone</i18n.Translate>
+ </b>
+ .
</p>
</ConfirmModal>
)}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx
index 547996ea1..ec3bec184 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/QrPage.tsx
@@ -21,11 +21,9 @@
import {
TalerMerchantApi,
- stringifyPayTemplateUri
+ stringifyPayTemplateUri,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { VNode, h } from "preact";
import { QR } from "../../../../components/exception/QR.js";
import { useSessionContext } from "../../../../context/session.js";
@@ -42,29 +40,6 @@ export function QrPage({ id: templateId, onBack }: Props): VNode {
const { i18n } = useTranslationContext();
const { state } = useSessionContext();
- // const [state, setState] = useState<Partial<Entity>>({
- // amount: contract.amount,
- // summary: contract.summary,
- // });
-
- // const errors: FormErrors<Entity> = {};
-
- // const fixedAmount = !!contract.amount;
- // const fixedSummary = !!contract.summary;
-
- // const templateParams: Record<string, string> = {};
- // if (!fixedAmount) {
- // if (state.amount) {
- // templateParams.amount = state.amount;
- // } else {
- // templateParams.amount = config.currency;
- // }
- // }
-
- // if (!fixedSummary) {
- // templateParams.summary = state.summary ?? "";
- // }
-
const merchantBaseUrl = state.backendUrl.href;
const payTemplateUri = stringifyPayTemplateUri({
@@ -79,7 +54,9 @@ export function QrPage({ id: templateId, onBack }: Props): VNode {
<section id="printThis">
<QR text={payTemplateUri} />
<pre style={{ textAlign: "center" }}>
- <a target="_blank" rel="noreferrer" href={payTemplateUri}>{payTemplateUri}</a>
+ <a target="_blank" rel="noreferrer" href={payTemplateUri}>
+ {payTemplateUri}
+ </a>
</pre>
</section>
@@ -87,35 +64,6 @@ export function QrPage({ id: templateId, onBack }: Props): VNode {
<div class="columns">
<div class="column" />
<div class="column is-four-fifths">
- {/* <p class="is-size-5 mt-5 mb-5">
- <i18n.Translate>
- Here you can specify a default value for fields that are not
- fixed. Default values can be edited by the customer before the
- payment.
- </i18n.Translate>
- </p> */}
-
- <p></p>
- {/* <FormProvider
- object={state}
- valueHandler={setState}
- errors={errors}
- >
- <InputCurrency<Entity>
- name="amount"
- label={i18n.str`Amount`}
- readonly
- tooltip={i18n.str`Amount of the order`}
- />
- <Input<Entity>
- name="summary"
- inputType="multiline"
- readonly
- label={i18n.str`Summary`}
- tooltip={i18n.str`Title of the order to be shown to the customer`}
- />
- </FormProvider> */}
-
<div class="buttons is-right mt-5">
{onBack && (
<button class="button" onClick={onBack}>
@@ -138,18 +86,31 @@ export function QrPage({ id: templateId, onBack }: Props): VNode {
}
function saveAsPDF(name: string): void {
- const printWindow = window.open("", "", "height=400,width=800");
- if (!printWindow) return;
+ // TODO: Look into using media queries in the current page, to print the current page, instead of opening a new window
+
const divContents = document.getElementById("printThis");
if (!divContents) return;
- printWindow.document.write(
- `<html><head><title>Order template for ${name}</title><style>`,
- );
- printWindow.document.write("</style></head><body>&nbsp;</body></html>");
- printWindow.document.close();
- printWindow.document.body.appendChild(divContents.cloneNode(true));
+
+ let dom = `<!DOCTYPE html>
+<html>
+ <head>
+ <title>Order template for ${name}</title>
+ <style>
+ pre > a {
+ text-decoration: none;
+ }
+ </style>
+ </head>
+ <body>
+ ${divContents.outerHTML}
+ </body>
+</html>`;
+ const blobUrl = URL.createObjectURL(new Blob([dom]));
+ const printWindow = window.open(blobUrl, "", "height=400,width=800");
+ if (!printWindow) return;
printWindow.addEventListener("load", () => {
printWindow.print();
- // printWindow.close();
+ printWindow.close();
+ URL.revokeObjectURL(blobUrl);
});
}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx
index ed809c7b3..93347f616 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/qr/index.tsx
@@ -19,13 +19,16 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
+import {
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
import { VNode, h } from "preact";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
import { Loading } from "../../../../components/exception/loading.js";
-import {
- useTemplateDetails
-} from "../../../../hooks/templates.js";
+import { useTemplateDetails } from "../../../../hooks/templates.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
import { QrPage } from "./QrPage.js";
import { LoginPage } from "../../../login/index.js";
@@ -36,31 +39,27 @@ interface Props {
tid: string;
}
-export default function TemplateQrPage({
- tid,
- onBack,
-}: Props): VNode {
+export default function TemplateQrPage({ tid, onBack }: Props): VNode {
const result = useTemplateDetails(tid);
- if (!result) return <Loading />
+ if (!result) return <Loading />;
if (result instanceof TalerError) {
- return <ErrorLoadingMerchant error={result} />
+ return <ErrorLoadingMerchant error={result} />;
}
if (result.type === "fail") {
- switch(result.case) {
+ switch (result.case) {
case HttpStatusCode.NotFound: {
- return <NotFoundPageOrAdminCreate />
+ return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
- assertUnreachable(result)
+ assertUnreachable(result);
}
}
}
-
return (
- <QrPage contract={result.body.template_contract} id={tid} onBack={onBack} />
+ <QrPage contract={result.body.template_contract} id={tid} onBack={onBack} />
);
}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx
index 113cf5baa..f7edbe663 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/UpdatePage.tsx
@@ -27,9 +27,7 @@ import {
TalerMerchantApi,
TranslatedString,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
@@ -68,8 +66,7 @@ interface Props {
export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
const { i18n } = useTranslationContext();
- const { config } = useSessionContext();
- const { state: session } = useSessionContext();
+ const { config, state: session } = useSessionContext();
const [state, setState] = useState<Partial<Entity>>({
description: template.template_description,
@@ -77,8 +74,8 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
otpId: template.otp_id,
pay_duration: template.template_contract.pay_duration
? Duration.fromTalerProtocolDuration(
- template.template_contract.pay_duration,
- )
+ template.template_contract.pay_duration,
+ )
: undefined,
summary:
template.editable_defaults?.summary ?? template.template_contract.summary,
@@ -116,24 +113,28 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
const parsedPrice = !state.amount ? undefined : Amounts.parse(state.amount);
const errors: FormErrors<Entity> = {
- description: !state.description ? i18n.str`should not be empty` : undefined,
+ description: !state.description ? i18n.str`Required` : undefined,
amount: !state.amount
- ? state.amount_editable ? undefined : i18n.str`required`
+ ? state.amount_editable
+ ? undefined
+ : i18n.str`Required`
: !parsedPrice
- ? i18n.str`not valid`
+ ? i18n.str`Invalid`
: Amounts.isZero(parsedPrice)
- ? state.amount_editable ? undefined : i18n.str`must be greater than 0`
+ ? state.amount_editable
+ ? undefined
+ : i18n.str`Must be greater than 0`
: undefined,
minimum_age:
state.minimum_age && state.minimum_age < 0
- ? i18n.str`should be greater that 0`
+ ? i18n.str`Must be greater that 0`
: undefined,
pay_duration: !state.pay_duration
- ? i18n.str`can't be empty`
+ ? i18n.str`Required`
: state.pay_duration.d_ms === "forever"
? undefined
: state.pay_duration.d_ms < 1000 // less than one second
- ? i18n.str`to short`
+ ? i18n.str`Too short`
: undefined,
};
@@ -143,12 +144,14 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
(k) => (errors as Record<string, unknown>)[k] !== undefined,
);
- const zero = Amounts.stringify(Amounts.zeroOfCurrency(config.currency))
+ const zero = Amounts.stringify(Amounts.zeroOfCurrency(config.currency));
const submitForm = () => {
if (hasErrors) return Promise.reject();
- const contract_amount = state.amount_editable ? undefined : state.amount as AmountString
- const contract_summary = state.summary_editable ? undefined : state.summary
+ const contract_amount = state.amount_editable
+ ? undefined
+ : (state.amount as AmountString);
+ const contract_summary = state.summary_editable ? undefined : state.summary;
const template_contract: TalerMerchantApi.TemplateContractDetails = {
minimum_age: state.minimum_age!,
pay_duration: Duration.toTalerProtocolDuration(state.pay_duration!),
@@ -158,13 +161,13 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
cList.length > 1 && state.currency_editable
? undefined
: config.currency,
- }
+ };
return onUpdate({
template_description: state.description!,
template_contract,
editable_defaults: {
- amount: !state.amount_editable ? undefined : (state.amount ?? zero),
- summary: !state.summary_editable ? undefined : (state.summary ?? ""),
+ amount: !state.amount_editable ? undefined : state.amount ?? zero,
+ summary: !state.summary_editable ? undefined : state.summary ?? "",
currency:
cList.length === 1 || !state.currency_editable
? undefined
@@ -183,7 +186,12 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
<div class="level-left">
<div class="level-item">
<span class="is-size-4">
- {new URL(`templates/${template.id}`, session.backendUrl.href).href}
+ {
+ new URL(
+ `templates/${template.id}`,
+ session.backendUrl.href,
+ ).href
+ }
</span>
</div>
</div>
@@ -220,7 +228,7 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
<InputCurrency<Entity>
name="amount"
label={i18n.str`Amount`}
- tooltip={i18n.str`If specified, this template will create order with the same price`}
+ tooltip={i18n.str`If specified, this template will create orders with the same price`}
/>
<InputToggle<Entity>
name="amount_editable"
@@ -237,7 +245,7 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
/>
<TextField name="sc" label={i18n.str`Supported currencies`}>
<i18n.Translate>
- supported currencies: {cList.join(", ")}
+ Supported currencies: {cList.join(", ")}
</i18n.Translate>
</TextField>
</Fragment>
@@ -295,7 +303,7 @@ export function UpdatePage({ template, onUpdate, onBack }: Props): VNode {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
index ad804831c..5e3608334 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
@@ -19,19 +19,20 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
import { Loading } from "../../../../components/exception/loading.js";
import { NotificationCard } from "../../../../components/menu/index.js";
import { useSessionContext } from "../../../../context/session.js";
-import {
- useTemplateDetails,
-} from "../../../../hooks/templates.js";
+import { useTemplateDetails } from "../../../../hooks/templates.js";
import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
@@ -50,27 +51,26 @@ export default function UpdateTemplate({
onConfirm,
onBack,
}: Props): VNode {
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const result = useTemplateDetails(tid);
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- if (!result) return <Loading />
+ if (!result) return <Loading />;
if (result instanceof TalerError) {
- return <ErrorLoadingMerchant error={result} />
+ return <ErrorLoadingMerchant error={result} />;
}
if (result.type === "fail") {
- switch(result.case) {
+ switch (result.case) {
case HttpStatusCode.NotFound: {
- return <NotFoundPageOrAdminCreate />
+ return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
- assertUnreachable(result)
+ assertUnreachable(result);
}
}
}
@@ -79,16 +79,31 @@ export default function UpdateTemplate({
<Fragment>
<NotificationCard notification={notif} />
<UpdatePage
- template={{...result.body, id: tid}}
+ template={{ ...result.body, id: tid }}
onBack={onBack}
onUpdate={(data) => {
- return lib.instance.updateTemplate(state.token, tid, data)
- .then(onConfirm)
+ return lib.instance
+ .updateTemplate(state.token, tid, data)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Template (ID: ${tid}) has been updated`,
+ type: "SUCCESS",
+ });
+ onConfirm();
+ } else {
+ setNotif({
+ message: i18n.str`Could not update template`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not update template`,
+ message: i18n.str`Could not update template`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx
index 5b1404b55..a78dc6027 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/UsePage.tsx
@@ -55,8 +55,10 @@ export function UsePage({ id, template, onCreateOrder, onBack }: Props): VNode {
});
const errors: FormErrors<Entity> = {
- amount: !state.amount ? i18n.str`Amount is required` : undefined,
- summary: !state.summary ? i18n.str`Order summary is required` : undefined,
+ amount: !state.amount ? i18n.str`An amount is required` : undefined,
+ summary: !state.summary
+ ? i18n.str`An order summary is required`
+ : undefined,
};
const hasErrors = Object.keys(errors).some(
@@ -83,7 +85,7 @@ export function UsePage({ id, template, onCreateOrder, onBack }: Props): VNode {
<div class="level-left">
<div class="level-item">
<span class="is-size-4">
- <i18n.Translate>New order for template</i18n.Translate>:{" "}
+ <i18n.Translate>New order from template</i18n.Translate>:{" "}
<b>{id}</b>
</span>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
index 00cb2b827..f0ff7230c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
@@ -19,18 +19,19 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
import { Loading } from "../../../../components/exception/loading.js";
import { NotificationCard } from "../../../../components/menu/index.js";
-import {
- useTemplateDetails
-} from "../../../../hooks/templates.js";
+import { useTemplateDetails } from "../../../../hooks/templates.js";
import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
@@ -54,20 +55,20 @@ export default function TemplateUsePage({
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- if (!result) return <Loading />
+ if (!result) return <Loading />;
if (result instanceof TalerError) {
- return <ErrorLoadingMerchant error={result} />
+ return <ErrorLoadingMerchant error={result} />;
}
if (result.type === "fail") {
- switch(result.case) {
+ switch (result.case) {
case HttpStatusCode.NotFound: {
- return <NotFoundPageOrAdminCreate />
+ return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
- assertUnreachable(result)
+ assertUnreachable(result);
}
}
}
@@ -79,26 +80,52 @@ export default function TemplateUsePage({
template={result.body}
id={tid}
onBack={onBack}
- onCreateOrder={(
- request: TalerMerchantApi.UsingTemplateDetails,
- ) => {
-
- return lib.instance.useTemplateCreateOrder(tid, request)
- .then((res) => {
- if (res.type === "ok") {
- onOrderCreated(res.body.order_id)
+ onCreateOrder={(request: TalerMerchantApi.UsingTemplateDetails) => {
+ return lib.instance
+ .useTemplateCreateOrder(tid, request)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ onOrderCreated(resp.body.order_id);
} else {
- setNotif({
- message: i18n.str`could not create order from template`,
- type: "ERROR",
- });
+ switch (resp.case) {
+ case HttpStatusCode.UnavailableForLegalReasons: {
+ setNotif({
+ message: i18n.str`Could not create order`,
+ type: "ERROR",
+ description: i18n.str`No exchange would accept a payment because of KYC requirements.`,
+ });
+ return;
+ }
+ case HttpStatusCode.Unauthorized:
+ case HttpStatusCode.NotFound:
+ case HttpStatusCode.Conflict: {
+ setNotif({
+ message: i18n.str`Could not create order`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ return;
+ }
+ case HttpStatusCode.Gone: {
+ setNotif({
+ message: i18n.str`Could not create order`,
+ type: "ERROR",
+ description: i18n.str`No more stock for product with ID "${resp.body.product_id}".`,
+ });
+ return;
+ }
+ default: {
+ assertUnreachable(resp);
+ }
+ }
}
})
.catch((error) => {
setNotif({
- message: i18n.str`could not create order from template`,
+ message: i18n.str`Could not create order from template`,
type: "ERROR",
- description: error.message,
+ description:
+ error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/token/DetailPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/token/DetailPage.tsx
index d718ffb69..be23299ff 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/token/DetailPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/token/DetailPage.tsx
@@ -28,6 +28,7 @@ import { Input } from "../../../components/form/Input.js";
import { NotificationCard } from "../../../components/menu/index.js";
import { useSessionContext } from "../../../context/session.js";
import { AccessToken, createRFC8959AccessTokenPlain } from "@gnu-taler/taler-util";
+import { undefinedIfEmpty } from "../../../utils/table.js";
interface Props {
hasToken: boolean | undefined;
@@ -50,25 +51,23 @@ export function DetailPage({
});
const { i18n } = useTranslationContext();
- const errors = {
+ const errors = undefinedIfEmpty({
old_token:
hasToken && !form.old_token
- ? i18n.str`you need your access token to perform the operation`
+ ? i18n.str`You need your access token to perform the operation`
: undefined,
new_token: !form.new_token
- ? i18n.str`cannot be empty`
+ ? i18n.str`Required`
: form.new_token === form.old_token
- ? i18n.str`cannot be the same as the old token`
+ ? i18n.str`Can't be the same as the old token`
: undefined,
repeat_token:
form.new_token !== form.repeat_token
- ? i18n.str`is not the same`
+ ? i18n.str`Is not the same`
: undefined,
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as Record<string, unknown>)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const { state } = useSessionContext();
@@ -120,7 +119,7 @@ export function DetailPage({
<Input<State>
name="old_token"
label={i18n.str`Current access token`}
- tooltip={i18n.str`access token currently in use`}
+ tooltip={i18n.str`Access token currently in use`}
inputType="password"
/>
<p>
@@ -149,13 +148,13 @@ export function DetailPage({
<Input<State>
name="new_token"
label={i18n.str`New access token`}
- tooltip={i18n.str`next access token to be used`}
+ tooltip={i18n.str`Next access token to be used`}
inputType="password"
/>
<Input<State>
name="repeat_token"
label={i18n.str`Repeat access token`}
- tooltip={i18n.str`confirm the same access token`}
+ tooltip={i18n.str`Confirm the same access token`}
inputType="password"
/>
</Fragment>
@@ -171,7 +170,7 @@ export function DetailPage({
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
index c23e5be17..b9659951c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
@@ -18,9 +18,7 @@ import {
TalerError,
assertUnreachable,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../components/ErrorLoadingMerchant.js";
@@ -40,8 +38,7 @@ interface Props {
export default function Token({ onChange, onCancel }: Props): VNode {
const { i18n } = useTranslationContext();
- const { lib } = useSessionContext();
- const { logIn } = useSessionContext();
+ const { logIn, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const result = useInstanceDetails();
@@ -85,17 +82,15 @@ export default function Token({ onChange, onCancel }: Props): VNode {
return setNotif({
message: i18n.str`Failed to clear token`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
- if (error instanceof Error) {
- return setNotif({
- message: i18n.str`Failed to clear token`,
- type: "ERROR",
- description: error.message,
- });
- }
+ return setNotif({
+ message: i18n.str`Failed to clear token`,
+ type: "ERROR",
+ description: error instanceof Error ? error.message : String(error),
+ });
}
}}
onNewToken={async (currentToken, newToken): Promise<void> => {
@@ -113,7 +108,7 @@ export default function Token({ onChange, onCancel }: Props): VNode {
return setNotif({
message: i18n.str`Failed to set new token`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
}
@@ -137,13 +132,11 @@ export default function Token({ onChange, onCancel }: Props): VNode {
});
}
} catch (error) {
- if (error instanceof Error) {
return setNotif({
message: i18n.str`Failed to set new token`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
- }
}
}}
/>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx
index 32c92cab0..1850d4638 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx
@@ -23,12 +23,12 @@ import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, h, VNode } from "preact";
import { useState } from "preact/hooks";
import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
import { Notification } from "../../../../utils/types.js";
import { useSessionContext } from "../../../../context/session.js";
import { CreatePage } from "./CreatePage.js";
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
-export type Entity = MerchantBackend.TokenFamilies.TokenFamilyAddDetail;
+export type Entity = TalerMerchantApi.TokenFamilyCreateRequest;
interface Props {
onBack?: () => void;
onConfirm: () => void;
@@ -36,8 +36,7 @@ interface Props {
export default function CreateTokenFamily({ onConfirm, onBack }: Props): VNode {
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
return (
<Fragment>
@@ -46,12 +45,26 @@ export default function CreateTokenFamily({ onConfirm, onBack }: Props): VNode {
onBack={onBack}
onCreate={(request) => {
return lib.instance.createTokenFamily(state.token, request)
- .then(() => onConfirm())
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Token familty created successfully`,
+ type: "SUCCESS",
+ });
+ onConfirm();
+ } else {
+ setNotif({
+ message: i18n.str`Could not create token family`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not create token family`,
+ message: i18n.str`Could not create token family`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/Table.tsx
index 1af8a1192..28823e8a1 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/Table.tsx
@@ -23,7 +23,6 @@ import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, h, VNode } from "preact";
import { StateUpdater, useState } from "preact/hooks";
import { format } from "date-fns";
-import { MerchantBackend } from "../../../../declaration.js";
import { TalerMerchantApi } from "@gnu-taler/taler-util";
type Entity = TalerMerchantApi.TokenFamilySummary;
@@ -34,7 +33,7 @@ interface Props {
onSelect: (tokenFamily: Entity) => void;
onUpdate: (
slug: string,
- data: MerchantBackend.TokenFamilies.TokenFamilyPatchDetail,
+ data: TalerMerchantApi.TokenFamilyUpdateRequest,
) => Promise<void>;
onCreate: () => void;
selected?: boolean;
@@ -63,7 +62,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add token family`}
+ data-tooltip={i18n.str`Add token family`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -100,7 +99,7 @@ interface TableProps {
onSelect: (tokenFamily: Entity) => void;
onUpdate: (
slug: string,
- data: MerchantBackend.TokenFamilies.TokenFamilyPatchDetail,
+ data: TalerMerchantApi.TokenFamilyUpdateRequest,
) => Promise<void>;
onDelete: (tokenFamily: Entity) => void;
rowSelectionHandler: StateUpdater<string | undefined>;
@@ -111,7 +110,6 @@ function Table({
rowSelectionHandler,
instances,
onSelect,
- onUpdate,
onDelete,
}: TableProps): VNode {
const { i18n } = useTranslationContext();
@@ -191,7 +189,7 @@ function Table({
<div class="buttons is-right">
<span
class="has-tooltip-bottom"
- data-tooltip={i18n.str`go to token family update page`}
+ data-tooltip={i18n.str`Go to token family update page`}
>
<button
class="button is-small is-success "
@@ -203,7 +201,7 @@ function Table({
</span>
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`remove this token family from the database`}
+ data-tooltip={i18n.str`Remove this token family from the database`}
>
<button
class="button is-small is-danger"
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx
index 58d071ffc..75da1496c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx
@@ -20,38 +20,32 @@
*/
import {
- ErrorType,
- HttpError,
- useTranslationContext,
-} from "@gnu-taler/web-util/browser";
-import { h, VNode } from "preact";
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { VNode, h } from "preact";
import { useState } from "preact/hooks";
+import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
import { Loading } from "../../../../components/exception/loading.js";
import { NotificationCard } from "../../../../components/menu/index.js";
-import { MerchantBackend } from "../../../../declaration.js";
-import {
- useInstanceTokenFamilies,
-} from "../../../../hooks/tokenfamily.js";
-import { Notification } from "../../../../utils/types.js";
-import { CardTable } from "./Table.js";
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
-import { useSessionContext } from "../../../../context/session.js";
-import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
import { ConfirmModal } from "../../../../components/modal/index.js";
+import { useSessionContext } from "../../../../context/session.js";
+import { useInstanceTokenFamilies } from "../../../../hooks/tokenfamily.js";
+import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
+import { CardTable } from "./Table.js";
interface Props {
onUnauthorized: () => VNode;
onNotFound: () => VNode;
onCreate: () => void;
onSelect: (slug: string) => void;
- onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;
}
-export default function TokenFamilyList({
- onCreate,
- onSelect,
-}: Props): VNode {
+export default function TokenFamilyList({ onCreate, onSelect }: Props): VNode {
const result = useInstanceTokenFamilies();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { lib, state } = useSessionContext();
@@ -70,7 +64,7 @@ export default function TokenFamilyList({
return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
assertUnreachable(result);
@@ -87,14 +81,26 @@ export default function TokenFamilyList({
onCreate={onCreate}
onUpdate={async (slug, fam) => {
try {
- await lib.instance.updateTokenFamily(state.token, slug, fam);
- setNotif({
- message: i18n.str`token family updated successfully`,
- type: "SUCCESS",
- });
+ const resp = await lib.instance.updateTokenFamily(
+ state.token,
+ slug,
+ fam,
+ );
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Token family updated successfully`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Could not update the token family`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
} catch (error) {
setNotif({
- message: i18n.str`could not update the token family`,
+ message: i18n.str`Could not update the token family`,
type: "ERROR",
description: error instanceof Error ? error.message : undefined,
});
@@ -114,11 +120,22 @@ export default function TokenFamilyList({
onCancel={() => setDeleting(null)}
onConfirm={async (): Promise<void> => {
try {
- await lib.instance.deleteTokenFamily(state.token, deleting.slug);
- setNotif({
- message: i18n.str`Token family "${deleting.name}" (SLUG: ${deleting.slug}) has been deleted`,
- type: "SUCCESS",
- });
+ const resp = await lib.instance.deleteTokenFamily(
+ state.token,
+ deleting.slug,
+ );
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Token family "${deleting.name}" (SLUG: ${deleting.slug}) has been deleted`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Failed to delete token family`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
} catch (error) {
setNotif({
message: i18n.str`Failed to delete token family`,
@@ -130,11 +147,20 @@ export default function TokenFamilyList({
}}
>
<p>
- If you delete the <b>&quot;{deleting.name}&quot;</b> token family (Slug:{" "}
- <b>{deleting.slug}</b>), all issued tokens will become invalid.
+ <i18n.Translate>
+ If you delete the <b>&quot;{deleting.name}&quot;</b> token family
+ (Slug: <b>{deleting.slug}</b>), all issued tokens will become
+ invalid.
+ </i18n.Translate>
</p>
<p class="warning">
- Deleting a token family <b>cannot be undone</b>.
+ <i18n.Translate>
+ Deleting a token family{" "}
+ <b>
+ <i18n.Translate>can't be undone</i18n.Translate>
+ </b>
+ .
+ </i18n.Translate>
</p>
</ConfirmModal>
)}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/UpdatePage.tsx
index 5641d261b..382821f8c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/UpdatePage.tsx
@@ -23,13 +23,12 @@ import { Duration, TalerMerchantApi } from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { h } from "preact";
import { useState } from "preact/hooks";
-import * as yup from "yup";
import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
import { FormErrors, FormProvider } from "../../../../components/form/FormProvider.js";
import { Input } from "../../../../components/form/Input.js";
import { InputDate } from "../../../../components/form/InputDate.js";
import { InputDuration } from "../../../../components/form/InputDuration.js";
-import { TokenFamilyUpdateSchema } from "../../../../schemas/index.js";
+import { undefinedIfEmpty } from "../../../../utils/table.js";
type Entity = Omit<TalerMerchantApi.TokenFamilyUpdateRequest, "duration"> & {
duration: Duration,
@@ -52,25 +51,16 @@ function convert(from: TalerMerchantApi.TokenFamilyUpdateRequest) {
export function UpdatePage({ onUpdate, onBack, tokenFamily }: Props) {
const [value, valueHandler] = useState<Partial<Entity>>(convert(tokenFamily));
- let errors: FormErrors<Entity> = {};
-
- try {
- TokenFamilyUpdateSchema.validateSync(value, {
- abortEarly: false,
- });
- } catch (err) {
- if (err instanceof yup.ValidationError) {
- const yupErrors = err.inner as yup.ValidationError[];
- errors = yupErrors.reduce(
- (prev, cur) =>
- !cur.path ? prev : { ...prev, [cur.path]: cur.message },
- {},
- );
- }
- }
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const { i18n } = useTranslationContext();
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ name: !value.name ? i18n.str`Required` : undefined,
+ description: !value.description ? i18n.str`Required` : undefined,
+ valid_after: !value.valid_after ? i18n.str`Required` : undefined,
+ valid_before: !value.valid_before ? i18n.str`Required` : undefined,
+ duration: !value.duration ? i18n.str`Required` : undefined,
+ });
+
+ const hasErrors = errors !== undefined;
const submitForm = () => {
if (hasErrors) return Promise.reject();
@@ -84,7 +74,6 @@ export function UpdatePage({ onUpdate, onBack, tokenFamily }: Props) {
return onUpdate(result);
}
- const { i18n } = useTranslationContext();
return (
<div>
@@ -95,7 +84,7 @@ export function UpdatePage({ onUpdate, onBack, tokenFamily }: Props) {
<div class="level-left">
<div class="level-item">
<span class="is-size-4">
- Token Family: <b>{tokenFamily.name}</b>
+ <i18n.Translate>Token Family: <b>{tokenFamily.name}</b></i18n.Translate>
</span>
</div>
</div>
@@ -117,30 +106,30 @@ export function UpdatePage({ onUpdate, onBack, tokenFamily }: Props) {
name="name"
inputType="text"
label={i18n.str`Name`}
- tooltip={i18n.str`user-readable token family name`}
+ tooltip={i18n.str`User-readable token family name`}
/>
<Input<Entity>
name="description"
inputType="multiline"
label={i18n.str`Description`}
- tooltip={i18n.str`token family description for customers`}
+ tooltip={i18n.str`Token family description for customers`}
/>
<InputDate<Entity>
name="valid_after"
label={i18n.str`Valid After`}
- tooltip={i18n.str`token family can issue tokens after this date`}
+ tooltip={i18n.str`Token family can issue tokens after this date`}
withTimestampSupport
/>
<InputDate<Entity>
name="valid_before"
label={i18n.str`Valid Before`}
- tooltip={i18n.str`token family can issue tokens until this date`}
+ tooltip={i18n.str`Token family can issue tokens until this date`}
withTimestampSupport
/>
<InputDuration<Entity>
name="duration"
label={i18n.str`Duration`}
- tooltip={i18n.str`validity duration of a issued token`}
+ tooltip={i18n.str`Validity duration of a issued token`}
withForever
/>
</FormProvider>
@@ -156,7 +145,7 @@ export function UpdatePage({ onUpdate, onBack, tokenFamily }: Props) {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx
index 068235e14..b8d95bdb1 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx
@@ -20,22 +20,23 @@
*/
import {
- ErrorType,
- HttpError,
- useTranslationContext,
-} from "@gnu-taler/web-util/browser";
-import { Fragment, h, VNode } from "preact";
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
+import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
import { Loading } from "../../../../components/exception/loading.js";
import { NotificationCard } from "../../../../components/menu/index.js";
-import { Notification } from "../../../../utils/types.js";
-import { UpdatePage } from "./UpdatePage.js";
-import { HttpStatusCode, TalerError, TalerMerchantApi, assertUnreachable } from "@gnu-taler/taler-util";
-import { useTokenFamilyDetails } from "../../../../hooks/tokenfamily.js";
import { useSessionContext } from "../../../../context/session.js";
-import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
+import { useTokenFamilyDetails } from "../../../../hooks/tokenfamily.js";
+import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
+import { UpdatePage } from "./UpdatePage.js";
type Entity = TalerMerchantApi.TokenFamilyUpdateRequest;
@@ -65,7 +66,7 @@ export default function UpdateTokenFamily({
return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
assertUnreachable(result);
@@ -89,13 +90,29 @@ export default function UpdateTokenFamily({
tokenFamily={family}
onBack={onBack}
onUpdate={(data) => {
- return lib.instance.updateTokenFamily(state.token, slug, data)
- .then(onConfirm)
+ return lib.instance
+ .updateTokenFamily(state.token, slug, data)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Token family updated successfully`,
+ type: "SUCCESS",
+ });
+ onConfirm();
+ } else {
+ setNotif({
+ message: i18n.str`Could not update token family`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not update token family`,
+ message: i18n.str`Could not update token family`,
type: "ERROR",
- description: error.message,
+ description:
+ error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
index 91aabe58e..9fd0e6c7e 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
@@ -35,6 +35,7 @@ import {
CROCKFORD_BASE32_REGEX,
URL_REGEX,
} from "../../../../utils/constants.js";
+import { undefinedIfEmpty } from "../../../../utils/table.js";
type Entity = TalerMerchantApi.TransferInformation;
@@ -54,26 +55,24 @@ export function CreatePage({ accounts, onCreate, onBack }: Props): VNode {
credit_amount: `` as AmountString,
});
- const errors: FormErrors<Entity> = {
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
wtid: !state.wtid
- ? i18n.str`cannot be empty`
+ ? i18n.str`Required`
: !CROCKFORD_BASE32_REGEX.test(state.wtid)
- ? i18n.str`check the id, does not look valid`
- : state.wtid.length !== 52
- ? i18n.str`should have 52 characters, current ${state.wtid.length}`
- : undefined,
- payto_uri: !state.payto_uri ? i18n.str`cannot be empty` : undefined,
- credit_amount: !state.credit_amount ? i18n.str`cannot be empty` : undefined,
+ ? i18n.str`Check the id, does not look valid`
+ : state.wtid.length !== 52
+ ? i18n.str`Must have 52 characters, current ${state.wtid.length}`
+ : undefined,
+ payto_uri: !state.payto_uri ? i18n.str`Required` : undefined,
+ credit_amount: !state.credit_amount ? i18n.str`Required` : undefined,
exchange_url: !state.exchange_url
- ? i18n.str`cannot be empty`
+ ? i18n.str`Required`
: !URL_REGEX.test(state.exchange_url)
- ? i18n.str`URL doesn't have the right format`
- : undefined,
- };
+ ? i18n.str`URL doesn't have the right format`
+ : undefined,
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submitForm = () => {
if (hasErrors) return Promise.reject();
@@ -95,14 +94,14 @@ export function CreatePage({ accounts, onCreate, onBack }: Props): VNode {
name="payto_uri"
label={i18n.str`Credited bank account`}
values={accounts}
- placeholder={i18n.str`Select one account`}
+ placeholder={i18n.str`Select an account`}
tooltip={i18n.str`Bank account of the merchant where the payment was received`}
/>
<Input<Entity>
name="wtid"
label={i18n.str`Wire transfer ID`}
help=""
- tooltip={i18n.str`unique identifier of the wire transfer used by the exchange, must be 52 characters long`}
+ tooltip={i18n.str`Unique identifier of the wire transfer used by the exchange, must be 52 characters long`}
/>
<Input<Entity>
name="exchange_url"
@@ -128,7 +127,7 @@ export function CreatePage({ accounts, onCreate, onBack }: Props): VNode {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
index 428476337..2ee03ead3 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
@@ -38,8 +38,7 @@ interface Props {
}
export default function CreateTransfer({ onConfirm, onBack }: Props): VNode {
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
const instance = useInstanceBankAccounts();
@@ -57,12 +56,26 @@ export default function CreateTransfer({ onConfirm, onBack }: Props): VNode {
onCreate={(request: TalerMerchantApi.TransferInformation) => {
return lib.instance
.informWireTransfer(state.token, request)
- .then(() => onConfirm())
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Wire transfer informed successfully`,
+ type: "SUCCESS",
+ });
+ onConfirm()
+ } else {
+ setNotif({
+ message: i18n.str`Could not inform transfer`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not inform transfer`,
+ message: i18n.str`Could not inform transfer`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
index 927e36cf7..f80c0f53f 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
@@ -81,7 +81,7 @@ export function ListPage({
return d
}}
placeholder={i18n.str`All accounts`}
- tooltip={i18n.str`filter by account address`}
+ tooltip={i18n.str`Filter by account address`}
/>
</FormProvider>
</div>
@@ -92,7 +92,7 @@ export function ListPage({
<li class={isAllTransfers ? "is-active" : ""}>
<div
class="has-tooltip-right"
- data-tooltip={i18n.str`remove all filters`}
+ data-tooltip={i18n.str`Remove all filters`}
>
<a onClick={onShowAll}>
<i18n.Translate>All</i18n.Translate>
@@ -102,7 +102,7 @@ export function ListPage({
<li class={isVerifiedTransfers ? "is-active" : ""}>
<div
class="has-tooltip-right"
- data-tooltip={i18n.str`only show wire transfers confirmed by the merchant`}
+ data-tooltip={i18n.str`Only show wire transfers confirmed by the merchant`}
>
<a onClick={onShowVerified}>
<i18n.Translate>Verified</i18n.Translate>
@@ -112,7 +112,7 @@ export function ListPage({
<li class={isNonVerifiedTransfers ? "is-active" : ""}>
<div
class="has-tooltip-right"
- data-tooltip={i18n.str`only show wire transfers claimed by the exchange`}
+ data-tooltip={i18n.str`Only show wire transfers claimed by the exchange`}
>
<a onClick={onShowUnverified}>
<i18n.Translate>Unverified</i18n.Translate>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
index 5687d5e57..708bfa049 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
@@ -24,7 +24,10 @@ import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { format } from "date-fns";
import { h, VNode } from "preact";
import { StateUpdater, useState } from "preact/hooks";
-import { datetimeFormatForSettings, usePreference } from "../../../../hooks/preference.js";
+import {
+ datetimeFormatForSettings,
+ usePreference,
+} from "../../../../hooks/preference.js";
import { WithId } from "../../../../declaration.js";
type Entity = TalerMerchantApi.TransferDetails & WithId;
@@ -61,7 +64,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add new transfer`}
+ data-tooltip={i18n.str`Add new transfer`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -114,10 +117,10 @@ function Table({
{onLoadMoreBefore && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more transfers before the first one`}
+ data-tooltip={i18n.str`Load more transfers before the first one`}
onClick={onLoadMoreBefore}
>
- <i18n.Translate>load first page</i18n.Translate>
+ <i18n.Translate>Load first page</i18n.Translate>
</button>
)}
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -136,7 +139,7 @@ function Table({
<i18n.Translate>Verified</i18n.Translate>
</th>
<th>
- <i18n.Translate>Executed at</i18n.Translate>
+ <i18n.Translate>Executed on</i18n.Translate>
</th>
<th />
</tr>
@@ -145,7 +148,7 @@ function Table({
{instances.map((i) => {
return (
<tr key={i.id}>
- <td title={i.wtid}>{i.wtid.substring(0,16)}...</td>
+ <td title={i.wtid}>{i.wtid.substring(0, 16)}...</td>
<td>{i.credit_amount}</td>
<td>{i.confirmed ? i18n.str`yes` : i18n.str`no`}</td>
<td>{i.verified ? i18n.str`yes` : i18n.str`no`}</td>
@@ -154,16 +157,16 @@ function Table({
? i.execution_time.t_s == "never"
? i18n.str`never`
: format(
- i.execution_time.t_s * 1000,
- datetimeFormatForSettings(settings),
- )
+ i.execution_time.t_s * 1000,
+ datetimeFormatForSettings(settings),
+ )
: i18n.str`unknown`}
</td>
<td>
{i.verified !== true ? (
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected transfer from the database`}
+ data-tooltip={i18n.str`Delete selected transfer from the database`}
onClick={() => onDelete(i)}
>
<i18n.Translate>Delete</i18n.Translate>
@@ -178,10 +181,10 @@ function Table({
{onLoadMoreAfter && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more transfers after the last one`}
+ data-tooltip={i18n.str`Load more transfers after the last one`}
onClick={onLoadMoreAfter}
>
- <i18n.Translate>load next page</i18n.Translate>
+ <i18n.Translate>Load next page</i18n.Translate>
</button>
)}
</div>
@@ -199,7 +202,7 @@ function EmptyTable(): VNode {
</p>
<p>
<i18n.Translate>
- There is no transfer yet, add more pressing the + sign
+ There are no transfers to list yet, add more by pressing the + sign
</i18n.Translate>
</p>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
index 6a16446d8..cae1a7fe3 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
@@ -122,7 +122,7 @@ export default function ListTransfer({ onCreate }: Props): VNode {
setNotif({
message: i18n.str`Failed to delete transfer`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
index cde58967f..ec8fce947 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
@@ -27,6 +27,7 @@ import { AsyncButton } from "../../../components/exception/AsyncButton.js";
import {
FormErrors,
FormProvider,
+ TalerForm,
} from "../../../components/form/FormProvider.js";
import { DefaultInstanceFormFields } from "../../../components/instance/DefaultInstanceFormFields.js";
import { useSessionContext } from "../../../context/session.js";
@@ -35,9 +36,8 @@ import { undefinedIfEmpty } from "../../../utils/table.js";
export type Entity = Omit<Omit<TalerMerchantApi.InstanceReconfigurationMessage, "default_pay_delay">, "default_wire_transfer_delay"> & {
default_pay_delay: Duration,
default_wire_transfer_delay: Duration,
-};
+} & TalerForm;
-//TalerMerchantApi.InstanceAuthConfigurationMessage
interface Props {
onUpdate: (d: TalerMerchantApi.InstanceReconfigurationMessage) => void;
selected: TalerMerchantApi.QueryInstancesResponse;
@@ -55,7 +55,7 @@ function convert(
default_pay_delay: Duration.fromTalerProtocolDuration(default_pay_delay),
default_wire_transfer_delay: Duration.fromTalerProtocolDuration(default_wire_transfer_delay),
};
- return { ...defaults, ...rest };
+ return { ...defaults, ...rest } as Entity;
}
export function UpdatePage({
@@ -69,40 +69,38 @@ export function UpdatePage({
const { i18n } = useTranslationContext();
- const errors: FormErrors<Entity> = {
- name: !value.name ? i18n.str`required` : undefined,
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ name: !value.name ? i18n.str`Required` : undefined,
user_type: !value.user_type
- ? i18n.str`required`
+ ? i18n.str`Required`
: value.user_type !== "business" && value.user_type !== "individual"
- ? i18n.str`should be business or individual`
+ ? i18n.str`Must be business or individual`
: undefined,
default_pay_delay: !value.default_pay_delay
- ? i18n.str`required`
+ ? i18n.str`Required`
: !!value.default_wire_transfer_delay &&
value.default_wire_transfer_delay.d_ms !== "forever" &&
value.default_pay_delay.d_ms !== "forever" &&
value.default_pay_delay.d_ms > value.default_wire_transfer_delay.d_ms ?
- i18n.str`pay delay can't be greater than wire transfer delay` : undefined,
+ i18n.str`Pay delay can't be greater than wire transfer delay` : undefined,
default_wire_transfer_delay: !value.default_wire_transfer_delay
- ? i18n.str`required`
+ ? i18n.str`Required`
: undefined,
address: undefinedIfEmpty({
address_lines:
value.address?.address_lines && value.address?.address_lines.length > 7
- ? i18n.str`max 7 lines`
+ ? i18n.str`Max 7 lines`
: undefined,
}),
jurisdiction: undefinedIfEmpty({
address_lines:
value.address?.address_lines && value.address?.address_lines.length > 7
- ? i18n.str`max 7 lines`
+ ? i18n.str`Max 7 lines`
: undefined,
}),
- };
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submit = async (): Promise<void> => {
const { default_pay_delay, default_wire_transfer_delay, ...rest } = value as Required<Entity>;
@@ -111,7 +109,7 @@ export function UpdatePage({
default_wire_transfer_delay: Duration.toTalerProtocolDuration(default_wire_transfer_delay),
...rest,
}
- await onUpdate(result);
+ onUpdate(result);
};
// const [active, setActive] = useState(false);
@@ -159,7 +157,7 @@ export function UpdatePage({
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
disabled={hasErrors}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
index 9da7f7efb..2b2327eb2 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
@@ -103,11 +103,11 @@ function CommonUpdate(
}
return updateInstance(state.token, d)
.then(onConfirm)
- .catch((error: Error) =>
+ .catch((error) =>
setNotif({
message: i18n.str`Failed to update instance`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
}),
);
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx
index 8792aabea..234295174 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx
@@ -30,6 +30,7 @@ import {
import { Input } from "../../../../components/form/Input.js";
import { InputSelector } from "../../../../components/form/InputSelector.js";
import { TalerMerchantApi } from "@gnu-taler/taler-util";
+import { undefinedIfEmpty } from "../../../../utils/table.js";
type Entity = TalerMerchantApi.WebhookAddDetails;
@@ -45,26 +46,26 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
const [state, setState] = useState<Partial<Entity>>({});
- const errors: FormErrors<Entity> = {
- webhook_id: !state.webhook_id ? i18n.str`required` : undefined,
- event_type: !state.event_type ? i18n.str`required`
- : state.event_type !== "pay" && state.event_type !== "refund" ? i18n.str`it should be "pay" or "refund"`
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ webhook_id: !state.webhook_id ? i18n.str`Required` : undefined,
+ event_type: !state.event_type
+ ? i18n.str`Required`
+ : state.event_type !== "pay" && state.event_type !== "refund"
+ ? i18n.str`Must be "pay" or "refund"`
: undefined,
http_method: !state.http_method
- ? i18n.str`required`
+ ? i18n.str`Required`
: !validMethod.includes(state.http_method)
- ? i18n.str`should be one of '${validMethod.join(", ")}'`
+ ? i18n.str`Must be one of '${validMethod.join(", ")}'`
: undefined,
- url: !state.url ? i18n.str`required` : undefined,
- };
+ url: !state.url ? i18n.str`Required` : undefined,
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submitForm = () => {
if (hasErrors) return Promise.reject();
- return onCreate(state as any);
+ return onCreate(state as TalerMerchantApi.WebhookAddDetails);
};
return (
@@ -88,8 +89,8 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
label={i18n.str`Event`}
values={[
i18n.str`Choose one...`,
- i18n.str`pay`,
- i18n.str`refund`,
+ i18n.str`Pay`,
+ i18n.str`Refund`,
]}
tooltip={i18n.str`The event of the webhook: why the webhook is used`}
/>
@@ -114,28 +115,79 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
/>
<p>
- The text below support <a target="_blank" rel="noreferrer" href="https://mustache.github.io/mustache.5.html">mustache</a> template engine. Any string
- between <pre style={{ display: "inline", padding: 0 }}>&#123;&#123;</pre> and <pre style={{ display: "inline", padding: 0 }}>&#125;&#125;</pre> will
- be replaced with replaced with the value of the corresponding variable.
+ {/* prettier will add some nodes which we don't want because of i18n */}
+ {/* prettier-ignore */}
+ <i18n.Translate>
+ The text below support <a
+ target="_blank"
+ rel="noreferrer"
+ href="https://mustache.github.io/mustache.5.html"
+ >
+ mustache
+ </a> template engine. Any string between <pre style={{ display: "inline", padding: 0 }}>
+ &#123;&#123;
+ </pre> and <pre style={{ display: "inline", padding: 0 }}>
+ &#125;&#125;
+ </pre> will be replaced with replaced with the value of the
+ corresponding variable.
+ </i18n.Translate>
</p>
<p>
- For example <pre style={{ display: "inline", padding: 0 }}>&#123;&#123;contract_terms.amount&#125;&#125;</pre> will be replaced
- with the the order's price
+ {/* prettier will add some nodes which we don't want because of i18n */}
+ {/* prettier-ignore */}
+ <i18n.Translate>
+ For example <pre style={{ display: "inline", padding: 0 }}>
+ &#123;&#123;contract_terms.amount&#125;&#125;
+ </pre> will be replaced with the the order's price
+ </i18n.Translate>
</p>
<p>
- The short list of variables are:
+ <i18n.Translate>
+ The short list of variables are:
+ </i18n.Translate>
</p>
<div class="menu">
-
- <ul class="menu-list" style={{ listStyleType: "disc", marginLeft: 20 }}>
- <li><b>contract_terms.summary:</b> order's description </li>
- <li><b>contract_terms.amount:</b> order's price </li>
- <li><b>order_id:</b> order's unique identification </li>
- {state.event_type === "refund" && <Fragment>
- <li><b>refund_amout:</b> the amount that was being refunded</li>
- <li><b>reason:</b> the reason entered by the merchant staff for granting the refund</li>
- <li><b>timestamp:</b> time of the refund in nanoseconds since 1970</li>
- </Fragment>}
+ <ul
+ class="menu-list"
+ style={{ listStyleType: "disc", marginLeft: 20 }}
+ >
+ <li>
+ <b>contract_terms.summary:</b>{" "}
+ <i18n.Translate>order's description</i18n.Translate>
+ </li>
+ <li>
+ <b>contract_terms.amount:</b>{" "}
+ <i18n.Translate>order's price</i18n.Translate>
+ </li>
+ <li>
+ <b>order_id:</b>{" "}
+ <i18n.Translate>
+ order's unique identification
+ </i18n.Translate>
+ </li>
+ {state.event_type === "refund" && (
+ <Fragment>
+ <li>
+ <b>refund_amout:</b>{" "}
+ <i18n.Translate>
+ the amount that was being refunded
+ </i18n.Translate>
+ </li>
+ <li>
+ <b>reason:</b>{" "}
+ <i18n.Translate>
+ the reason entered by the merchant staff for granting
+ the refund
+ </i18n.Translate>
+ </li>
+ <li>
+ <b>timestamp:</b>{" "}
+ <i18n.Translate>
+ time of the refund in nanoseconds since 1970
+ </i18n.Translate>
+ </li>
+ </Fragment>
+ )}
</ul>
</div>
{/* <Input<Entity>
@@ -163,7 +215,7 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
index 70f246ff1..128124dc8 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
@@ -37,22 +37,35 @@ interface Props {
export default function CreateWebhook({ onConfirm, onBack }: Props): VNode {
const [notif, setNotif] = useState<Notification | undefined>(undefined);
const { i18n } = useTranslationContext();
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
return (
<>
<NotificationCard notification={notif} />
<CreatePage
onBack={onBack}
- onCreate={(request: TalerMerchantApi.WebhookAddDetails) => {
+ onCreate={async (request: TalerMerchantApi.WebhookAddDetails) => {
return lib.instance.addWebhook(state.token, request)
- .then(() => onConfirm())
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Webhook create successfully`,
+ type: "SUCCESS",
+ });
+ onConfirm()
+ } else {
+ setNotif({
+ message: i18n.str`Could not create the webhook`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not inform template`,
+ message: i18n.str`Could not create webhook`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx
index 877bd30e5..a80d789de 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/Table.tsx
@@ -59,7 +59,7 @@ export function CardTable({
<div class="card-header-icon" aria-label="more options">
<span
class="has-tooltip-left"
- data-tooltip={i18n.str`add new webhooks`}
+ data-tooltip={i18n.str`Add new webhooks`}
>
<button class="button is-info" type="button" onClick={onCreate}>
<span class="icon is-small">
@@ -114,10 +114,10 @@ function Table({
{onLoadMoreBefore && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more webhooks before the first one`}
+ data-tooltip={i18n.str`Load more webhooks before the first one`}
onClick={onLoadMoreBefore}
>
- <i18n.Translate>load first page</i18n.Translate>
+ <i18n.Translate>Load first page</i18n.Translate>
</button>
)}
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -152,18 +152,11 @@ function Table({
<div class="buttons is-right">
<button
class="button is-danger is-small has-tooltip-left"
- data-tooltip={i18n.str`delete selected webhook from the database`}
+ data-tooltip={i18n.str`Delete selected webhook from the database`}
onClick={() => onDelete(i)}
>
- Delete
+ <i18n.Translate>Delete</i18n.Translate>
</button>
- {/* <button
- class="button is-info is-small has-tooltip-left"
- data-tooltip={i18n.str`test webhook`}
- onClick={() => onNewOrder(i)}
- >
- Test
- </button> */}
</div>
</td>
</tr>
@@ -174,10 +167,10 @@ function Table({
{onLoadMoreAfter && (
<button
class="button is-fullwidth"
- data-tooltip={i18n.str`load more webhooks after the last one`}
+ data-tooltip={i18n.str`Load more webhooks after the last one`}
onClick={onLoadMoreAfter}
>
- <i18n.Translate>load next page</i18n.Translate>
+ <i18n.Translate>Load next page</i18n.Translate>
</button>
)}
</div>
@@ -195,7 +188,7 @@ function EmptyTable(): VNode {
</p>
<p>
<i18n.Translate>
- There is no webhooks yet, add more pressing the + sign
+ There are no webhooks to list yet, add more by pressing the + sign
</i18n.Translate>
</p>
</div>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
index 789b8d73b..fe374496f 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
@@ -25,9 +25,7 @@ import {
TalerMerchantApi,
assertUnreachable,
} from "@gnu-taler/taler-util";
-import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchant.js";
@@ -48,8 +46,7 @@ interface Props {
export default function ListWebhooks({ onCreate, onSelect }: Props): VNode {
const { i18n } = useTranslationContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const result = useInstanceWebhooks();
if (!result) return <Loading />;
@@ -62,7 +59,7 @@ export default function ListWebhooks({ onCreate, onSelect }: Props): VNode {
return <NotFoundPageOrAdminCreate />;
}
case HttpStatusCode.Unauthorized: {
- return <LoginPage />
+ return <LoginPage />;
}
default: {
assertUnreachable(result);
@@ -85,17 +82,25 @@ export default function ListWebhooks({ onCreate, onSelect }: Props): VNode {
onDelete={(e: TalerMerchantApi.WebhookEntry) => {
return lib.instance
.deleteWebhook(state.token, e.webhook_id)
- .then(() =>
- setNotif({
- message: i18n.str`webhook delete successfully`,
- type: "SUCCESS",
- }),
- )
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Webhook delete successfully`,
+ type: "SUCCESS",
+ });
+ } else {
+ setNotif({
+ message: i18n.str`Could not delete the webhook`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+ }
+ })
.catch((error) =>
setNotif({
- message: i18n.str`could not delete the webhook`,
+ message: i18n.str`Could not delete the webhook`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
}),
);
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx
index bcd53ffd0..1c1d0da79 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/UpdatePage.tsx
@@ -19,6 +19,7 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { TalerMerchantApi } from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { h, VNode } from "preact";
import { useState } from "preact/hooks";
@@ -28,8 +29,8 @@ import {
FormProvider,
} from "../../../../components/form/FormProvider.js";
import { Input } from "../../../../components/form/Input.js";
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
import { WithId } from "../../../../declaration.js";
+import { undefinedIfEmpty } from "../../../../utils/table.js";
type Entity = TalerMerchantApi.WebhookPatchDetails & WithId;
@@ -45,23 +46,21 @@ export function UpdatePage({ webhook, onUpdate, onBack }: Props): VNode {
const [state, setState] = useState<Partial<Entity>>(webhook);
- const errors: FormErrors<Entity> = {
- event_type: !state.event_type ? i18n.str`required` : undefined,
+ const errors = undefinedIfEmpty<FormErrors<Entity>>({
+ event_type: !state.event_type ? i18n.str`Required` : undefined,
http_method: !state.http_method
- ? i18n.str`required`
+ ? i18n.str`Required`
: !validMethod.includes(state.http_method)
- ? i18n.str`should be one of '${validMethod.join(", ")}'`
- : undefined,
- url: !state.url ? i18n.str`required` : undefined,
- };
+ ? i18n.str`Must be one of '${validMethod.join(", ")}'`
+ : undefined,
+ url: !state.url ? i18n.str`Required` : undefined,
+ });
- const hasErrors = Object.keys(errors).some(
- (k) => (errors as any)[k] !== undefined,
- );
+ const hasErrors = errors !== undefined;
const submitForm = () => {
if (hasErrors) return Promise.reject();
- return onUpdate(state as any);
+ return onUpdate(state as Entity);
};
return (
@@ -130,7 +129,7 @@ export function UpdatePage({ webhook, onUpdate, onBack }: Props): VNode {
data-tooltip={
hasErrors
? i18n.str`Need to complete marked fields`
- : "confirm operation"
+ : i18n.str`Confirm operation`
}
onClick={submitForm}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
index 6c0466dad..82f1463f9 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
@@ -29,6 +29,7 @@ import { ErrorLoadingMerchant } from "../../../../components/ErrorLoadingMerchan
import { Loading } from "../../../../components/exception/loading.js";
import { NotificationCard } from "../../../../components/menu/index.js";
import { useSessionContext } from "../../../../context/session.js";
+import { WithId } from "../../../../declaration.js";
import {
useWebhookDetails,
} from "../../../../hooks/webhooks.js";
@@ -36,7 +37,6 @@ import { Notification } from "../../../../utils/types.js";
import { LoginPage } from "../../../login/index.js";
import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js";
import { UpdatePage } from "./UpdatePage.js";
-import { WithId } from "../../../../declaration.js";
export type Entity = TalerMerchantApi.WebhookPatchDetails & WithId;
@@ -50,8 +50,7 @@ export default function UpdateWebhook({
onConfirm,
onBack,
}: Props): VNode {
- const { lib } = useSessionContext();
- const { state } = useSessionContext();
+ const { state, lib } = useSessionContext();
const result = useWebhookDetails(tid);
const [notif, setNotif] = useState<Notification | undefined>(undefined);
@@ -81,14 +80,29 @@ export default function UpdateWebhook({
<UpdatePage
webhook={{ ...result.body, id: tid }}
onBack={onBack}
- onUpdate={(data) => {
+ onUpdate={async (data) => {
return lib.instance.updateWebhook(state.token, tid, data)
- .then(onConfirm)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ setNotif({
+ message: i18n.str`Webhook updated`,
+ type: "SUCCESS",
+ });
+ onConfirm()
+ } else {
+ setNotif({
+ message: i18n.str`Could not update webhook`,
+ type: "ERROR",
+ description: resp.detail?.hint,
+ });
+
+ }
+ })
.catch((error) => {
setNotif({
- message: i18n.str`could not update template`,
+ message: i18n.str`Could not update webhook`,
type: "ERROR",
- description: error.message,
+ description: error instanceof Error ? error.message : String(error),
});
});
}}
diff --git a/packages/merchant-backoffice-ui/src/paths/login/index.tsx b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
index d77bc75fd..ceb4622d8 100644
--- a/packages/merchant-backoffice-ui/src/paths/login/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
@@ -19,10 +19,11 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { HttpStatusCode, createRFC8959AccessTokenEncoded } from "@gnu-taler/taler-util";
import {
- useTranslationContext
-} from "@gnu-taler/web-util/browser";
+ HttpStatusCode,
+ createRFC8959AccessTokenEncoded,
+} from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { ComponentChildren, Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { NotificationCard } from "../../components/menu/index.js";
@@ -42,8 +43,7 @@ const tokenRequest = {
export function LoginPage(_p: Props): VNode {
const [token, setToken] = useState("");
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { state, logIn } = useSessionContext();
- const { lib } = useSessionContext();
+ const { lib, state, logIn } = useSessionContext();
const { i18n } = useTranslationContext();
@@ -60,14 +60,14 @@ export function LoginPage(_p: Props): VNode {
switch (result.case) {
case HttpStatusCode.Unauthorized: {
setNotif({
- message: "Your password is incorrect",
+ message: i18n.str`Your password is incorrect`,
type: "ERROR",
});
return;
}
case HttpStatusCode.NotFound: {
setNotif({
- message: "Your instance not found",
+ message: i18n.str`Your instance cannot be found`,
type: "ERROR",
});
return;
diff --git a/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx b/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx
index 4d348c02b..e0ce17be8 100644
--- a/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx
@@ -31,7 +31,7 @@ import {
import InstanceCreatePage from "../../paths/admin/create/index.js";
import { InstancePaths } from "../../Routing.js";
-export function NotFoundPage(): VNode {
+function NotFoundPage(): VNode {
return (
<div>
<p>That page doesn&apos;t exist.</p>
diff --git a/packages/merchant-backoffice-ui/src/paths/settings/index.tsx b/packages/merchant-backoffice-ui/src/paths/settings/index.tsx
index ac23f7f09..468bf2268 100644
--- a/packages/merchant-backoffice-ui/src/paths/settings/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/settings/index.tsx
@@ -14,6 +14,7 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
+import { AbsoluteTime } from "@gnu-taler/taler-util";
import { useLang, useTranslationContext } from "@gnu-taler/web-util/browser";
import { VNode, h } from "preact";
import {
@@ -24,7 +25,6 @@ import { InputSelector } from "../../components/form/InputSelector.js";
import { InputToggle } from "../../components/form/InputToggle.js";
import { LangSelector } from "../../components/menu/LangSelector.js";
import { Preferences, usePreference } from "../../hooks/preference.js";
-import { AbsoluteTime } from "@gnu-taler/taler-util";
function getBrowserLang(): string | undefined {
if (typeof window === "undefined") return undefined;
@@ -46,6 +46,7 @@ export function Settings({ onClose }: { onClose?: () => void }): VNode {
const v: Preferences = {
advanceOrderMode: next.advanceOrderMode ?? false,
advanceInstanceMode: next.advanceInstanceMode ?? false,
+ developerMode: next.developerMode ?? false,
hideMissingAccountUntil: next.hideMissingAccountUntil ?? AbsoluteTime.never(),
hideKycUntil: next.hideKycUntil ?? AbsoluteTime.never(),
dateFormat: next.dateFormat ?? "ymd",
@@ -82,19 +83,6 @@ export function Settings({ onClose }: { onClose?: () => void }): VNode {
</div>
<div class="field field-body has-addons is-flex-grow-3">
<LangSelector />
- &nbsp;
- {borwserLang !== undefined && (
- <button
- data-tooltip={i18n.str`generate random secret key`}
- class="button is-info mr-2"
- onClick={(e) => {
- update(borwserLang.substring(0, 2));
- e.preventDefault()
- }}
- >
- <i18n.Translate>Set default</i18n.Translate>
- </button>
- )}
</div>
</div>
<InputToggle<Preferences>
@@ -127,7 +115,12 @@ export function Settings({ onClose }: { onClose?: () => void }): VNode {
return "choose one";
}}
values={["ymd", "mdy", "dmy"]}
- tooltip={i18n.str`how the date is going to be displayed`}
+ tooltip={i18n.str`How the date is going to be displayed`}
+ />
+ <InputToggle<Preferences>
+ label={i18n.str`Developer mode`}
+ tooltip={i18n.str`Shows more options and tools which are not intended for general audience.`}
+ name="developerMode"
/>
</FormProvider>
</div>
diff --git a/packages/merchant-backoffice-ui/src/schemas/index.ts b/packages/merchant-backoffice-ui/src/schemas/index.ts
deleted file mode 100644
index 77d23f49a..000000000
--- a/packages/merchant-backoffice-ui/src/schemas/index.ts
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2024 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
- */
-
-import { Amounts } from "@gnu-taler/taler-util";
-import { isAfter, isFuture } from "date-fns";
-import * as yup from "yup";
-import { PAYTO_REGEX } from "../utils/constants.js";
-import { MerchantBackend } from "../declaration.js";
-// import { MerchantBackend } from "../declaration.js";
-
-yup.setLocale({
- mixed: {
- default: "field_invalid",
- },
- number: {
- min: ({ min }: any) => ({ key: "field_too_short", values: { min } }),
- max: ({ max }: any) => ({ key: "field_too_big", values: { max } }),
- },
-});
-
-function listOfPayToUrisAreValid(values?: (string | undefined)[]): boolean {
- return !!values && values.every((v) => v && PAYTO_REGEX.test(v));
-}
-
-function currencyWithAmountIsValid(value?: string): boolean {
- return !!value && Amounts.parse(value) !== undefined;
-}
-function currencyGreaterThan0(value?: string) {
- if (value) {
- try {
- const [, amount] = value.split(":");
- const intAmount = parseInt(amount, 10);
- return intAmount > 0;
- } catch {
- return false;
- }
- }
- return true;
-}
-
-export const InstanceSchema = yup.object().shape({
- id: yup.string().required().meta({ type: "url" }),
- name: yup.string().required(),
- auth: yup.object().shape({
- method: yup.string().matches(/^(external|token)$/),
- token: yup.string().optional().nullable(),
- }),
- payto_uris: yup
- .array()
- .of(yup.string())
- .min(1)
- .meta({ type: "array" })
- .test("payto", "{path} is not valid", listOfPayToUrisAreValid),
- default_max_deposit_fee: yup
- .string()
- .required()
- .test("amount", "the amount is not valid", currencyWithAmountIsValid)
- .meta({ type: "amount" }),
- default_max_wire_fee: yup
- .string()
- .required()
- .test("amount", "{path} is not valid", currencyWithAmountIsValid)
- .meta({ type: "amount" }),
- default_wire_fee_amortization: yup.number().required(),
- address: yup
- .object()
- .shape({
- country: yup.string().optional(),
- address_lines: yup.array().of(yup.string()).max(7).optional(),
- building_number: yup.string().optional(),
- building_name: yup.string().optional(),
- street: yup.string().optional(),
- post_code: yup.string().optional(),
- town_location: yup.string().optional(),
- town: yup.string(),
- district: yup.string().optional(),
- country_subdivision: yup.string().optional(),
- })
- .meta({ type: "group" }),
- jurisdiction: yup
- .object()
- .shape({
- country: yup.string().optional(),
- address_lines: yup.array().of(yup.string()).max(7).optional(),
- building_number: yup.string().optional(),
- building_name: yup.string().optional(),
- street: yup.string().optional(),
- post_code: yup.string().optional(),
- town_location: yup.string().optional(),
- town: yup.string(),
- district: yup.string().optional(),
- country_subdivision: yup.string().optional(),
- })
- .meta({ type: "group" }),
- // default_pay_delay: yup.object()
- // .shape({ d_us: yup.number() })
- // .required()
- // .meta({ type: 'duration' }),
- // .transform(numberToDuration),
- default_wire_transfer_delay: yup
- .object()
- .shape({ d_us: yup.number() })
- .required()
- .meta({ type: "duration" }),
- // .transform(numberToDuration),
-});
-
-export const InstanceUpdateSchema = InstanceSchema.clone().omit(["id"]);
-export const InstanceCreateSchema = InstanceSchema.clone();
-
-export const OrderCreateSchema = yup.object().shape({
- pricing: yup
- .object()
- .required()
- .shape({
- summary: yup.string().ensure().required(),
- order_price: yup
- .string()
- .ensure()
- .required()
- .test("amount", "the amount is not valid", currencyWithAmountIsValid)
- .test(
- "amount_positive",
- "the amount should be greater than 0",
- currencyGreaterThan0,
- ),
- }),
- // extra: yup.object().test("extra", "is not a JSON format", stringIsValidJSON),
- payments: yup
- .object()
- .required()
- .shape({
- refund_deadline: yup
- .date()
- .test("future", "should be in the future", (d) =>
- d ? isFuture(d) : true,
- ),
- pay_deadline: yup
- .date()
- .test("future", "should be in the future", (d) =>
- d ? isFuture(d) : true,
- ),
- auto_refund_deadline: yup
- .date()
- .test("future", "should be in the future", (d) =>
- d ? isFuture(d) : true,
- ),
- delivery_date: yup
- .date()
- .test("future", "should be in the future", (d) =>
- d ? isFuture(d) : true,
- ),
- })
- .test("payment", "dates", (d) => {
- if (
- d.pay_deadline &&
- d.refund_deadline &&
- isAfter(d.refund_deadline, d.pay_deadline)
- ) {
- return new yup.ValidationError(
- "pay deadline should be greater than refund",
- "asd",
- "payments.pay_deadline",
- );
- }
- return true;
- }),
-});
-
-export const ProductCreateSchema = yup.object().shape({
- product_id: yup.string().ensure().required(),
- description: yup.string().required(),
- unit: yup.string().ensure().required(),
- price: yup
- .string()
- .required()
- .test("amount", "the amount is not valid", currencyWithAmountIsValid),
- stock: yup.object({}).optional(),
- minimum_age: yup.number().optional().min(0),
-});
-
-export const ProductUpdateSchema = yup.object().shape({
- description: yup.string().required(),
- price: yup
- .string()
- .required()
- .test("amount", "the amount is not valid", currencyWithAmountIsValid),
- stock: yup.object({}).optional(),
- minimum_age: yup.number().optional().min(0),
-});
-
-export const TaxSchema = yup.object().shape({
- name: yup.string().required().ensure(),
- tax: yup
- .string()
- .required()
- .test("amount", "the amount is not valid", currencyWithAmountIsValid),
-});
-
-export const NonInventoryProductSchema = yup.object().shape({
- quantity: yup.number().required().positive(),
- description: yup.string().required(),
- unit: yup.string().ensure().required(),
- price: yup
- .string()
- .required()
- .test("amount", "the amount is not valid", currencyWithAmountIsValid),
-});
-
-const timestampSchema = yup.object().shape({
- t_s: yup.mixed().test(
- 'is-timestamp',
- 'Invalid timestamp',
- value => typeof value === 'number' || value === 'never'
- )
-}).required();
-
-const durationSchema = yup.object().shape({
- d_us: yup.mixed().test(
- 'is-duration',
- 'Invalid duration',
- value => typeof value === 'number' || value === 'forever'
- )
-}).required();
-
-const tokenFamilyKindSchema = yup.mixed().oneOf<MerchantBackend.TokenFamilies.TokenFamilyKind>(["discount", "subscription"]).required();
-
-export const TokenFamilyCreateSchema = yup.object().shape({
- slug: yup.string().ensure().required(),
- name: yup.string().required(),
- description: yup.string().required(),
- // description_i18n: yup.lazy((obj) =>
- // yup.object().shape(
- // Object.keys(obj || {}).reduce((acc, key) => {
- // acc[key] = yup.string().required();
- // return acc;
- // }, {})
- // )
- // ).optional(),
- valid_after: timestampSchema.optional(),
- valid_before: timestampSchema,
- duration: durationSchema,
- kind: tokenFamilyKindSchema,
-});
-
-export const TokenFamilyUpdateSchema = yup.object().shape({
- name: yup.string().required(),
- description: yup.string().required(),
- // description_i18n: yup.lazy((obj) =>
- // yup.object().shape(
- // Object.keys(obj).reduce((acc, key) => {
- // acc[key] = yup.string().required();
- // return acc;
- // }, {})
- // )
- // ),
- valid_after: timestampSchema,
- valid_before: timestampSchema,
- duration: durationSchema,
-});
diff --git a/packages/merchant-backoffice-ui/src/scss/_aside.scss b/packages/merchant-backoffice-ui/src/scss/_aside.scss
index b7b59516b..719da7d2c 100644
--- a/packages/merchant-backoffice-ui/src/scss/_aside.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_aside.scss
@@ -130,7 +130,11 @@ aside.aside {
@include touch {
nav.navbar {
- @include transition(margin-left);
+ // @include transition(margin-left);
+ // TODO: adapt above transition mixin to work with multiple transitions
+ transition:
+ margin-left 250ms ease-in-out 50ms,
+ width 250ms ease-in-out 50ms;
}
aside.aside {
@include transition(left);
@@ -173,6 +177,7 @@ aside.aside {
div.has-aside-mobile-expanded {
nav.navbar {
margin-left: $aside-mobile-width;
+ width: calc(100vw - $aside-mobile-width);
}
aside.aside {
left: 0;
diff --git a/packages/merchant-backoffice-ui/src/scss/toggle.scss b/packages/merchant-backoffice-ui/src/scss/toggle.scss
index d3ff22997..c10b0cbd4 100644
--- a/packages/merchant-backoffice-ui/src/scss/toggle.scss
+++ b/packages/merchant-backoffice-ui/src/scss/toggle.scss
@@ -50,14 +50,14 @@ $green: #56c080;
background: $green;
&:before {
- left: 4px;
+ left: 30px;
}
}
.toggle-checkbox:not(checked)+& {
- background: $red;
+ background: $grey-lighter;
&:before {
- left: 30px;
+ left: 4px;
}
}
.toggle-checkbox:indeterminate+& {
diff --git a/packages/merchant-backoffice-ui/src/settings.json b/packages/merchant-backoffice-ui/src/settings.json
new file mode 100644
index 000000000..bba9ed6cd
--- /dev/null
+++ b/packages/merchant-backoffice-ui/src/settings.json
@@ -0,0 +1,3 @@
+{
+ "backendBaseURL": "http://merchant.taler.test:1180/"
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/transfers/update/index.tsx b/packages/merchant-backoffice-ui/src/type-override.d.ts
index 719f99209..703b60331 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/transfers/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/type-override.d.ts
@@ -15,12 +15,18 @@
*/
/**
- *
- * @author Sebastian Javier Marchano (sebasjm)
+ * define unknown type of catch function
*/
-
-import { h, VNode } from "preact";
-
-export default function UpdateTransfer(): VNode {
- return <div>order transfer page</div>;
+interface Promise<T> {
+ /**
+ * Attaches a callback for only the rejection of the Promise.
+ * @param onrejected The callback to execute when the Promise is rejected.
+ * @returns A Promise for the completion of the callback.
+ */
+ catch<TResult = never>(
+ onrejected?:
+ | ((reason: unknown) => TResult | PromiseLike<TResult>)
+ | undefined
+ | null,
+ ): Promise<T | TResult>;
}
diff --git a/packages/merchant-backoffice-ui/src/utils/table.ts b/packages/merchant-backoffice-ui/src/utils/table.ts
index 5a94654f3..af989c3e9 100644
--- a/packages/merchant-backoffice-ui/src/utils/table.ts
+++ b/packages/merchant-backoffice-ui/src/utils/table.ts
@@ -51,7 +51,7 @@ export function buildActions<T extends WithId>(
* @returns
*/
export function undefinedIfEmpty<
- T extends Record<string, unknown> | Array<unknown>,
+ T extends object | Record<string, unknown> | Array<unknown>,
>(obj: T | undefined): T | undefined {
if (obj === undefined) return undefined;
return Object.values(obj).some((v) => v !== undefined) ? obj : undefined;