diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src')
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> + + <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, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, """) + .replace(/'/g, "'")}`, + )} />`; } }); 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> + + <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> + + <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> + + <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>"{element.name}"</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>"{element.name}"</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>"{element.name}"</b> (ID:{" "} - <b>{element.id}</b>), you will also delete all it's transaction - data. + <i18n.Translate> + If you purge the instance named <b>"{element.name}"</b> (ID:{" "} + <b>{element.id}</b>), you will also delete all it's transaction + data. + </i18n.Translate> </p> <p> - The instance will disappear from your list, and you will no longer be - able to access it's data. + <i18n.Translate> + The instance will disappear from your list, and you will no longer be + able to access it'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'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'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. "USD:2.3"." msgstr "" +"Geben Sie Währung und Betrag mit einem Doppelpunkt getrennt ein, z.B. "" +"EUR:2,3"." -#: 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'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'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. "USD:2.3"." 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'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'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. "USD:2.3"." msgstr "" "Ingrese divisa y valor separado por dos puntos, e.g. "USD:2.3"." -#: 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'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'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. "USD:2.3"." msgstr "" +"Saisissez la devise et la valeur séparées par deux points, par exemple " +""USD:2.3" ;." -#: 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'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'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. "USD:2.3"." 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's transaction data.": [ + "" + ], + "The instance will disappear from your list, and you will no longer be able to access it'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. "USD:2.3".": [ + "Введіть валюту та значення, розділені двокрапкою, наприклад, "USD:2.3"." + ], + "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's transaction data.": [ + "" + ], + "The instance will disappear from your list, and you will no longer be able to access it'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's transaction data.": [ + "" + ], + "The instance will disappear from your list, and you will no longer be able to access it'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's transaction data.": [ + "" + ], + "The instance will disappear from your list, and you will no longer be able to access it'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. "USD:2.3".": [ - "Ingrese divisa y valor separado por dos puntos, e.g. "USD:2.3"." + "" ], "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'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'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'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'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. "USD:2.3".": [ + "Ingrese divisa y valor separado por dos puntos, e.g. "USD:2.3"." + ], + "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. "USD:2.3".": [ + "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's transaction data.": [ "" ], - "not refundable": [ + "The instance will disappear from your list, and you will no longer be able to access it'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. "USD:2.3".": [ "" ], - "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. "USD:2.3".": [ + "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'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'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. "USD:2.3".": [ + "Geben Sie Währung und Betrag mit einem Doppelpunkt getrennt ein, z.B. "EUR:2,3"." + ], + "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'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'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. "USD:2.3"." 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'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'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. "USD:2.3"." 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'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'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. "USD:2.3"." +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'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'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. "USD:2.3"." +msgstr "" +"Введіть валюту та значення, розділені двокрапкою, наприклад, "" +"USD:2.3"." + +#: 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> + + <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>"{deleting.description}"</b> (ID:{" "} - <b>{deleting.id}</b>), the stock and related information will be lost + <i18n.Translate> + If you delete the product named{" "} + <b>"{deleting.description}"</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>"{deleting.template_description}"</b> (ID:{" "} - <b>{deleting.template_id}</b>) you may loose information + <i18n.Translate> + If you delete the template{" "} + <b>"{deleting.template_description}"</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> </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>"{deleting.name}"</b> token family (Slug:{" "} - <b>{deleting.slug}</b>), all issued tokens will become invalid. + <i18n.Translate> + If you delete the <b>"{deleting.name}"</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 }}>{{</pre> and <pre style={{ display: "inline", padding: 0 }}>}}</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 }}> + {{ + </pre> and <pre style={{ display: "inline", padding: 0 }}> + }} + </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 }}>{{contract_terms.amount}}</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 }}> + {{contract_terms.amount}} + </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'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 /> - - {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; |