Compare commits
27 Commits
v1.8.0-rc5
...
v1.8.4
Author | SHA1 | Date | |
---|---|---|---|
fadb05e97c | |||
9fb28e9974 | |||
a289ce381c | |||
5609bd256b | |||
b727304a9f | |||
6d4b2348ac | |||
397ca6ef0c | |||
d6e5ee2851 | |||
98d62e826b | |||
7b5ce8f70c | |||
2010a9a458 | |||
f787058c17 | |||
87ccae0d90 | |||
07d95c6ed7 | |||
514823f7d2 | |||
fb4feb24f3 | |||
5caa0e0722 | |||
0406b420c8 | |||
9d72b9779e | |||
fdc47e4a38 | |||
0566e964c0 | |||
896fbf9a5c | |||
126c8c101e | |||
3cb7cc01e4 | |||
2b3d15bf45 | |||
4049bdadcb | |||
2042ba37d8 |
@ -7,6 +7,10 @@ namespace BTCPayServer.Abstractions.Extensions;
|
||||
|
||||
public static class GreenfieldExtensions
|
||||
{
|
||||
public static IActionResult UserNotFound(this ControllerBase ctrl)
|
||||
{
|
||||
return ctrl.CreateAPIError(404, "user-not-found", "The user was not found");
|
||||
}
|
||||
public static IActionResult CreateValidationError(this ControllerBase controller, ModelStateDictionary modelState)
|
||||
{
|
||||
return controller.UnprocessableEntity(modelState.ToGreenfieldValidationError());
|
||||
|
@ -114,6 +114,11 @@ namespace BTCPayServer.Security
|
||||
_Policies.Add(policy);
|
||||
}
|
||||
|
||||
public void UnsafeEval()
|
||||
{
|
||||
Add("script-src", "'unsafe-eval'");
|
||||
}
|
||||
|
||||
public IEnumerable<ConsentSecurityPolicy> Rules => _Policies;
|
||||
public bool HasRules => _Policies.Count != 0;
|
||||
|
||||
|
31
BTCPayServer.Data/Migrations/20230315062447_fixmaxlength.cs
Normal file
31
BTCPayServer.Data/Migrations/20230315062447_fixmaxlength.cs
Normal file
@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using BTCPayServer.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BTCPayServer.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20230315062447_fixmaxlength")]
|
||||
public partial class fixmaxlength : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder.IsNpgsql())
|
||||
{
|
||||
migrationBuilder.Sql("ALTER TABLE \"InvoiceSearches\" ALTER COLUMN \"Value\" TYPE TEXT USING \"Value\"::TEXT;");
|
||||
migrationBuilder.Sql("ALTER TABLE \"Invoices\" ALTER COLUMN \"OrderId\" TYPE TEXT USING \"OrderId\"::TEXT;");
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
// Not supported
|
||||
}
|
||||
}
|
||||
}
|
@ -286,7 +286,7 @@ namespace BTCPayServer.Tests
|
||||
if (permissions.Contains(canModifyAllStores) || storePermissions.Any())
|
||||
{
|
||||
var resultStores =
|
||||
await TestApiAgainstAccessToken<StoreData[]>(accessToken, $"{TestApiPath}/me/stores",
|
||||
await TestApiAgainstAccessToken<Client.Models.StoreData[]>(accessToken, $"{TestApiPath}/me/stores",
|
||||
tester.PayTester.HttpClient);
|
||||
|
||||
foreach (var selectiveStorePermission in storePermissions)
|
||||
|
@ -212,12 +212,14 @@ namespace BTCPayServer.Tests
|
||||
var store = await unrestricted.CreateStore(new CreateStoreRequest() { Name = "Pouet lol" });
|
||||
|
||||
// Grant right to another user
|
||||
newUserAPIKey = await unrestricted.CreateAPIKey(newUser.Id, new CreateApiKeyRequest()
|
||||
newUserAPIKey = await unrestricted.CreateAPIKey(newUser.Email, new CreateApiKeyRequest()
|
||||
{
|
||||
Label = "Hello world",
|
||||
Permissions = new Permission[] { Permission.Create(Policies.CanViewInvoices, store.Id) },
|
||||
});
|
||||
|
||||
await AssertAPIError("user-not-found", () => unrestricted.CreateAPIKey("fewiofwuefo", new CreateApiKeyRequest()));
|
||||
|
||||
// Despite the grant, the user shouldn't be able to get the invoices!
|
||||
newUserClient = acc.CreateClientFromAPIKey(newUserAPIKey.ApiKey);
|
||||
await Assert.ThrowsAsync<GreenfieldAPIException>(() => newUserClient.GetInvoices(store.Id));
|
||||
@ -1303,15 +1305,21 @@ namespace BTCPayServer.Tests
|
||||
await user.CreateClient(Permission.Create(Policies.CanViewStoreSettings, user.StoreId).ToString());
|
||||
Assert.Single(await scopedClient.GetStores());
|
||||
|
||||
var noauth = await user.CreateClient(Array.Empty<string>());
|
||||
await AssertAPIError("missing-permission", () => noauth.GetStores());
|
||||
|
||||
// We strip the user's Owner right, so the key should not work
|
||||
using var ctx = tester.PayTester.GetService<Data.ApplicationDbContextFactory>().CreateContext();
|
||||
var storeEntity = await ctx.UserStore.SingleAsync(u => u.ApplicationUserId == user.UserId && u.StoreDataId == newStore.Id);
|
||||
storeEntity.Role = "Guest";
|
||||
await ctx.SaveChangesAsync();
|
||||
await AssertHttpError(403, async () => await client.UpdateStore(newStore.Id, new UpdateStoreRequest() { Name = "B" }));
|
||||
|
||||
client = await user.CreateClient(Policies.Unrestricted);
|
||||
stores = await client.GetStores();
|
||||
foreach (var s2 in stores)
|
||||
{
|
||||
await tester.PayTester.StoreRepository.DeleteStore(s2.Id);
|
||||
}
|
||||
tester.DeleteStore = false;
|
||||
Assert.Empty(await client.GetStores());
|
||||
}
|
||||
|
||||
private async Task<GreenfieldValidationException> AssertValidationError(string[] fields, Func<Task> act)
|
||||
|
@ -246,15 +246,18 @@ namespace BTCPayServer.Tests
|
||||
}
|
||||
|
||||
public List<string> Stores { get; internal set; } = new List<string>();
|
||||
|
||||
public bool DeleteStore { get; set; } = true;
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var r in this.Resources)
|
||||
r.Dispose();
|
||||
TestLogs.LogInformation("Disposing the BTCPayTester...");
|
||||
foreach (var store in Stores)
|
||||
if (DeleteStore)
|
||||
{
|
||||
Xunit.Assert.True(PayTester.StoreRepository.DeleteStore(store).GetAwaiter().GetResult());
|
||||
foreach (var store in Stores)
|
||||
{
|
||||
Xunit.Assert.True(PayTester.StoreRepository.DeleteStore(store).GetAwaiter().GetResult());
|
||||
}
|
||||
}
|
||||
if (PayTester != null)
|
||||
PayTester.Dispose();
|
||||
|
@ -223,7 +223,6 @@ retry:
|
||||
Thread.Sleep(200);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// This utility will make sure that permission documentation is properly written in swagger.template.json
|
||||
/// </summary>
|
||||
@ -273,8 +272,6 @@ retry:
|
||||
var langCode = GetLangCodeTransifexToJson(l);
|
||||
var langTranslations = await client.GetTranslations(resourceStrings, l);
|
||||
var translation = JsonTranslation.GetTranslation(folder, langCode);
|
||||
translation.Words.Clear();
|
||||
translation.Translate(langTranslations);
|
||||
if (translation.ShouldSkip())
|
||||
{
|
||||
Logs.WriteLine("Skipping " + langCode);
|
||||
|
@ -154,7 +154,7 @@ services:
|
||||
- "bitcoin_datadir:/data"
|
||||
|
||||
customer_lightningd:
|
||||
image: btcpayserver/lightning:v22.11-dev
|
||||
image: btcpayserver/lightning:v23.02-1-dev
|
||||
stop_signal: SIGKILL
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
@ -203,7 +203,7 @@ services:
|
||||
- merchant_lightningd
|
||||
|
||||
merchant_lightningd:
|
||||
image: btcpayserver/lightning:v22.11-dev
|
||||
image: btcpayserver/lightning:v23.02-1-dev
|
||||
stop_signal: SIGKILL
|
||||
environment:
|
||||
EXPOSE_TCP: "true"
|
||||
|
@ -141,7 +141,7 @@ services:
|
||||
- "bitcoin_datadir:/data"
|
||||
|
||||
customer_lightningd:
|
||||
image: btcpayserver/lightning:v22.11-dev
|
||||
image: btcpayserver/lightning:v23.02-1-dev
|
||||
stop_signal: SIGKILL
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
@ -190,7 +190,7 @@ services:
|
||||
- merchant_lightningd
|
||||
|
||||
merchant_lightningd:
|
||||
image: btcpayserver/lightning:v22.11-dev
|
||||
image: btcpayserver/lightning:v23.02-1-dev
|
||||
stop_signal: SIGKILL
|
||||
environment:
|
||||
EXPOSE_TCP: "true"
|
||||
|
@ -9,7 +9,7 @@
|
||||
"invoice_expiredpaidpartial" => "notifications-invoice-failure",
|
||||
"invoice_failedtoconfirm" => "notifications-invoice-failure",
|
||||
"invoice_confirmed" => "notifications-invoice-settled",
|
||||
"invoice_paidafterexpiration" => "notifications-settled",
|
||||
"invoice_paidafterexpiration" => "notifications-invoice-settled",
|
||||
"external-payout-transaction" => "notifications-payout",
|
||||
"payout_awaitingapproval" => "notifications-payout",
|
||||
"payout_awaitingpayment" => "notifications-payout-approved",
|
||||
|
@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using NBitcoin;
|
||||
using NBitcoin.DataEncoders;
|
||||
|
||||
@ -49,12 +50,16 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
return CreateUserAPIKey(_userManager.GetUserId(User), request);
|
||||
}
|
||||
|
||||
[HttpPost("~/api/v1/users/{userId}/api-keys")]
|
||||
[HttpPost("~/api/v1/users/{idOrEmail}/api-keys")]
|
||||
[Authorize(Policy = Policies.CanManageUsers, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
public async Task<IActionResult> CreateUserAPIKey(string userId, CreateApiKeyRequest request)
|
||||
public async Task<IActionResult> CreateUserAPIKey(string idOrEmail, CreateApiKeyRequest request)
|
||||
{
|
||||
request ??= new CreateApiKeyRequest();
|
||||
request.Permissions ??= System.Array.Empty<Permission>();
|
||||
|
||||
var userId = (await _userManager.FindByIdOrEmail(idOrEmail))?.Id;
|
||||
if (userId is null)
|
||||
return this.UserNotFound();
|
||||
var key = new APIKeyData()
|
||||
{
|
||||
Id = Encoders.Hex.EncodeData(RandomUtils.GetBytes(20)),
|
||||
@ -88,10 +93,13 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
return RevokeAPIKey(_userManager.GetUserId(User), apikey);
|
||||
}
|
||||
|
||||
[HttpDelete("~/api/v1/users/{userId}/api-keys/{apikey}", Order = 1)]
|
||||
[HttpDelete("~/api/v1/users/{idOrEmail}/api-keys/{apikey}", Order = 1)]
|
||||
[Authorize(Policy = Policies.CanManageUsers, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
public async Task<IActionResult> RevokeAPIKey(string userId, string apikey)
|
||||
public async Task<IActionResult> RevokeAPIKey(string idOrEmail, string apikey)
|
||||
{
|
||||
var userId = (await _userManager.FindByIdOrEmail(idOrEmail))?.Id;
|
||||
if (userId is null)
|
||||
return this.UserNotFound();
|
||||
if (!string.IsNullOrEmpty(apikey) &&
|
||||
await _apiKeyRepository.Remove(apikey, userId))
|
||||
return Ok();
|
||||
|
@ -9,6 +9,7 @@ using BTCPayServer.Data;
|
||||
using BTCPayServer.PayoutProcessors;
|
||||
using BTCPayServer.Security;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using StoreData = BTCPayServer.Data.StoreData;
|
||||
using PayoutProcessorData = BTCPayServer.Client.Models.PayoutProcessorData;
|
||||
@ -17,6 +18,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldPayoutProcessorsController : ControllerBase
|
||||
{
|
||||
private readonly IEnumerable<IPayoutProcessorFactory> _factories;
|
||||
|
@ -10,6 +10,7 @@ using BTCPayServer.PayoutProcessors;
|
||||
using BTCPayServer.PayoutProcessors.Lightning;
|
||||
using BTCPayServer.Services.Invoices;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using PayoutProcessorData = BTCPayServer.Data.PayoutProcessorData;
|
||||
|
||||
@ -17,6 +18,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStoreAutomatedLightningPayoutProcessorsController : ControllerBase
|
||||
{
|
||||
private readonly PayoutProcessorService _payoutProcessorService;
|
||||
@ -30,9 +32,8 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
}
|
||||
|
||||
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/" + nameof(LightningAutomatedPayoutSenderFactory))]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/" + nameof(LightningAutomatedPayoutSenderFactory) +
|
||||
"/{paymentMethod}")]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/LightningAutomatedPayoutSenderFactory")]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/LightningAutomatedPayoutSenderFactory/{paymentMethod}")]
|
||||
public async Task<IActionResult> GetStoreLightningAutomatedPayoutProcessors(
|
||||
string storeId, string? paymentMethod)
|
||||
{
|
||||
@ -64,8 +65,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
}
|
||||
|
||||
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpPut("~/api/v1/stores/{storeId}/payout-processors/" + nameof(LightningAutomatedPayoutSenderFactory) +
|
||||
"/{paymentMethod}")]
|
||||
[HttpPut("~/api/v1/stores/{storeId}/payout-processors/LightningAutomatedPayoutSenderFactory/{paymentMethod}")]
|
||||
public async Task<IActionResult> UpdateStoreLightningAutomatedPayoutProcessor(
|
||||
string storeId, string paymentMethod, LightningAutomatedPayoutSettings request)
|
||||
{
|
||||
|
@ -10,6 +10,7 @@ using BTCPayServer.PayoutProcessors;
|
||||
using BTCPayServer.PayoutProcessors.OnChain;
|
||||
using BTCPayServer.Services.Invoices;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using PayoutProcessorData = BTCPayServer.Data.PayoutProcessorData;
|
||||
|
||||
@ -17,6 +18,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStoreAutomatedOnChainPayoutProcessorsController : ControllerBase
|
||||
{
|
||||
private readonly PayoutProcessorService _payoutProcessorService;
|
||||
@ -30,9 +32,8 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
}
|
||||
|
||||
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/" + nameof(OnChainAutomatedPayoutSenderFactory))]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/" + nameof(OnChainAutomatedPayoutSenderFactory) +
|
||||
"/{paymentMethod}")]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/OnChainAutomatedPayoutSenderFactory")]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/payout-processors/OnChainAutomatedPayoutSenderFactory/{paymentMethod}")]
|
||||
public async Task<IActionResult> GetStoreOnChainAutomatedPayoutProcessors(
|
||||
string storeId, string? paymentMethod)
|
||||
{
|
||||
@ -70,8 +71,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
}
|
||||
|
||||
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpPut("~/api/v1/stores/{storeId}/payout-processors/" + nameof(OnChainAutomatedPayoutSenderFactory) +
|
||||
"/{paymentMethod}")]
|
||||
[HttpPut("~/api/v1/stores/{storeId}/payout-processors/OnChainAutomatedPayoutSenderFactory/{paymentMethod}")]
|
||||
public async Task<IActionResult> UpdateStoreOnchainAutomatedPayoutProcessor(
|
||||
string storeId, string paymentMethod, OnChainAutomatedPayoutSettings request)
|
||||
{
|
||||
|
@ -17,6 +17,7 @@ using BTCPayServer.Payments.Lightning;
|
||||
using BTCPayServer.Security;
|
||||
using BTCPayServer.Services.Stores;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using StoreData = BTCPayServer.Data.StoreData;
|
||||
@ -25,24 +26,19 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStoreLNURLPayPaymentMethodsController : ControllerBase
|
||||
{
|
||||
private StoreData Store => HttpContext.GetStoreData();
|
||||
private readonly StoreRepository _storeRepository;
|
||||
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
|
||||
private readonly IAuthorizationService _authorizationService;
|
||||
private readonly ISettingsRepository _settingsRepository;
|
||||
|
||||
public GreenfieldStoreLNURLPayPaymentMethodsController(
|
||||
StoreRepository storeRepository,
|
||||
BTCPayNetworkProvider btcPayNetworkProvider,
|
||||
IAuthorizationService authorizationService,
|
||||
ISettingsRepository settingsRepository)
|
||||
BTCPayNetworkProvider btcPayNetworkProvider)
|
||||
{
|
||||
_storeRepository = storeRepository;
|
||||
_btcPayNetworkProvider = btcPayNetworkProvider;
|
||||
_authorizationService = authorizationService;
|
||||
_settingsRepository = settingsRepository;
|
||||
}
|
||||
|
||||
public static IEnumerable<LNURLPayPaymentMethodData> GetLNURLPayPaymentMethods(StoreData store,
|
||||
|
@ -6,6 +6,7 @@ using BTCPayServer.Abstractions.Extensions;
|
||||
using BTCPayServer.Client;
|
||||
using BTCPayServer.Data;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using AuthenticationSchemes = BTCPayServer.Abstractions.Constants.AuthenticationSchemes;
|
||||
using LightningAddressData = BTCPayServer.Client.Models.LightningAddressData;
|
||||
@ -14,6 +15,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStoreLightningAddressesController : ControllerBase
|
||||
{
|
||||
private readonly LightningAddressService _lightningAddressService;
|
||||
|
@ -18,6 +18,7 @@ using BTCPayServer.Security;
|
||||
using BTCPayServer.Services;
|
||||
using BTCPayServer.Services.Stores;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using StoreData = BTCPayServer.Data.StoreData;
|
||||
@ -26,6 +27,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStoreLightningNetworkPaymentMethodsController : ControllerBase
|
||||
{
|
||||
private StoreData Store => HttpContext.GetStoreData();
|
||||
|
@ -8,6 +8,7 @@ using BTCPayServer.Data;
|
||||
using BTCPayServer.Events;
|
||||
using BTCPayServer.Payments;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NBXplorer.Models;
|
||||
|
||||
@ -17,6 +18,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpPost("~/api/v1/stores/{storeId}/payment-methods/onchain/{cryptoCode}/generate")]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public async Task<IActionResult> GenerateOnChainWallet(string storeId, string cryptoCode,
|
||||
GenerateWalletRequest request)
|
||||
{
|
||||
|
@ -14,6 +14,7 @@ using BTCPayServer.Services;
|
||||
using BTCPayServer.Services.Stores;
|
||||
using BTCPayServer.Services.Wallets;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NBitcoin;
|
||||
using NBXplorer.DerivationStrategy;
|
||||
@ -24,6 +25,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public partial class GreenfieldStoreOnChainPaymentMethodsController : ControllerBase
|
||||
{
|
||||
private StoreData Store => HttpContext.GetStoreData();
|
||||
|
@ -8,6 +8,7 @@ using BTCPayServer.Client.Models;
|
||||
using BTCPayServer.Data;
|
||||
using BTCPayServer.Security;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using StoreData = BTCPayServer.Data.StoreData;
|
||||
|
||||
@ -15,6 +16,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStorePaymentMethodsController : ControllerBase
|
||||
{
|
||||
private StoreData Store => HttpContext.GetStoreData();
|
||||
|
@ -7,12 +7,14 @@ using BTCPayServer.Client;
|
||||
using BTCPayServer.Client.Models;
|
||||
using BTCPayServer.PayoutProcessors;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace BTCPayServer.Controllers.Greenfield
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStorePayoutProcessorsController : ControllerBase
|
||||
{
|
||||
private readonly PayoutProcessorService _payoutProcessorService;
|
||||
|
@ -13,6 +13,7 @@ using BTCPayServer.Rating;
|
||||
using BTCPayServer.Services.Rates;
|
||||
using BTCPayServer.Services.Stores;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using RateSource = BTCPayServer.Client.Models.RateSource;
|
||||
|
||||
@ -21,6 +22,7 @@ namespace BTCPayServer.Controllers.GreenField
|
||||
[ApiController]
|
||||
[Route("api/v1/stores/{storeId}/rates/configuration")]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStoreRateConfigurationController : ControllerBase
|
||||
{
|
||||
private readonly RateFetcher _rateProviderFactory;
|
||||
|
@ -11,6 +11,7 @@ using BTCPayServer.Data;
|
||||
using BTCPayServer.Rating;
|
||||
using BTCPayServer.Services.Rates;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace BTCPayServer.Controllers.GreenField
|
||||
@ -18,6 +19,7 @@ namespace BTCPayServer.Controllers.GreenField
|
||||
[ApiController]
|
||||
[Route("api/v1/stores/{storeId}/rates")]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldStoreRatesController : ControllerBase
|
||||
{
|
||||
private readonly RateFetcher _rateProviderFactory;
|
||||
|
@ -20,10 +20,12 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
public class GreenfieldStoreUsersController : ControllerBase
|
||||
{
|
||||
private readonly StoreRepository _storeRepository;
|
||||
private readonly UserManager<ApplicationUser> _userManager;
|
||||
|
||||
public GreenfieldStoreUsersController(StoreRepository storeRepository, UserManager<ApplicationUser> userManager)
|
||||
{
|
||||
_storeRepository = storeRepository;
|
||||
_userManager = userManager;
|
||||
}
|
||||
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpGet("~/api/v1/stores/{storeId}/users")]
|
||||
@ -34,8 +36,8 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
return store == null ? StoreNotFound() : Ok(FromModel(store));
|
||||
}
|
||||
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpDelete("~/api/v1/stores/{storeId}/users/{userId}")]
|
||||
public async Task<IActionResult> RemoveStoreUser(string storeId, string userId)
|
||||
[HttpDelete("~/api/v1/stores/{storeId}/users/{idOrEmail}")]
|
||||
public async Task<IActionResult> RemoveStoreUser(string storeId, string idOrEmail)
|
||||
{
|
||||
var store = HttpContext.GetStoreData();
|
||||
if (store == null)
|
||||
@ -43,9 +45,9 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
return StoreNotFound();
|
||||
}
|
||||
|
||||
if (await _storeRepository.RemoveStoreUser(storeId, userId))
|
||||
var userId = await _userManager.FindByIdOrEmail(idOrEmail);
|
||||
if (userId != null && await _storeRepository.RemoveStoreUser(storeId, idOrEmail))
|
||||
{
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
||||
|
@ -112,7 +112,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
return Ok(FromModel(store));
|
||||
}
|
||||
|
||||
private Client.Models.StoreData FromModel(Data.StoreData data)
|
||||
internal static Client.Models.StoreData FromModel(Data.StoreData data)
|
||||
{
|
||||
var storeBlob = data.GetStoreBlob();
|
||||
return new Client.Models.StoreData()
|
||||
|
@ -1,3 +1,4 @@
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using BTCPayServer.Abstractions.Constants;
|
||||
using BTCPayServer.Client;
|
||||
@ -5,6 +6,7 @@ using BTCPayServer.Data;
|
||||
using BTCPayServer.Security;
|
||||
using BTCPayServer.Services.Stores;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
@ -16,6 +18,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
[Route("api/test/apikey")]
|
||||
[ApiController]
|
||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[EnableCors(CorsPolicies.All)]
|
||||
public class GreenfieldTestApiKeyController : ControllerBase
|
||||
{
|
||||
private readonly UserManager<ApplicationUser> _userManager;
|
||||
@ -52,9 +55,9 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
|
||||
[HttpGet("me/stores")]
|
||||
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
public StoreData[] GetCurrentUserStores()
|
||||
public BTCPayServer.Client.Models.StoreData[] GetCurrentUserStores()
|
||||
{
|
||||
return this.HttpContext.GetStoresData();
|
||||
return this.HttpContext.GetStoresData().Select(Greenfield.GreenfieldStoresController.FromModel).ToArray();
|
||||
}
|
||||
|
||||
[HttpGet("me/stores/{storeId}/can-view")]
|
||||
|
@ -69,22 +69,22 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
[HttpGet("~/api/v1/users/{idOrEmail}")]
|
||||
public async Task<IActionResult> GetUser(string idOrEmail)
|
||||
{
|
||||
var user = (await _userManager.FindByIdAsync(idOrEmail)) ?? await _userManager.FindByEmailAsync(idOrEmail);
|
||||
var user = await _userManager.FindByIdOrEmail(idOrEmail);
|
||||
if (user != null)
|
||||
{
|
||||
return Ok(await FromModel(user));
|
||||
}
|
||||
return UserNotFound();
|
||||
return this.UserNotFound();
|
||||
}
|
||||
|
||||
[Authorize(Policy = Policies.CanModifyServerSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||
[HttpPost("~/api/v1/users/{idOrEmail}/lock")]
|
||||
public async Task<IActionResult> LockUser(string idOrEmail, LockUserRequest request)
|
||||
{
|
||||
var user = await _userManager.FindByIdAsync(idOrEmail) ?? await _userManager.FindByEmailAsync(idOrEmail);
|
||||
var user = await _userManager.FindByIdOrEmail(idOrEmail);
|
||||
if (user is null)
|
||||
{
|
||||
return UserNotFound();
|
||||
return this.UserNotFound();
|
||||
}
|
||||
|
||||
var success = await _userService.ToggleUser(user.Id, request.Locked ? DateTimeOffset.MaxValue : null);
|
||||
@ -223,7 +223,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
var user = await _userManager.FindByIdAsync(userId);
|
||||
if (user == null)
|
||||
{
|
||||
return UserNotFound();
|
||||
return this.UserNotFound();
|
||||
}
|
||||
|
||||
// We can safely delete the user if it's not an admin user
|
||||
@ -251,12 +251,5 @@ namespace BTCPayServer.Controllers.Greenfield
|
||||
var roles = (await _userManager.GetRolesAsync(data)).ToArray();
|
||||
return UserService.FromModel(data, roles);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private IActionResult UserNotFound()
|
||||
{
|
||||
return this.CreateAPIError(404, "user-not-found", "The user was not found");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ namespace BTCPayServer.Filters
|
||||
AutoSelf = false;
|
||||
FixWebsocket = false;
|
||||
UnsafeInline = false;
|
||||
ScriptSrc = "'self' 'unsafe-eval'"; // unsafe-eval needed for vue
|
||||
ScriptSrc = "'self'";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,12 @@ namespace BTCPayServer.Filters
|
||||
Value = value;
|
||||
}
|
||||
|
||||
[Obsolete("Do not use second parameter ignored")]
|
||||
public XFrameOptionsAttribute(XFrameOptions type, string _ = null) : this(type)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public XFrameOptionsAttribute(XFrameOptions type)
|
||||
{
|
||||
Value = type switch
|
||||
|
@ -242,6 +242,12 @@ namespace BTCPayServer.Hosting
|
||||
settings.FileSystemStorageAsDefault = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
if (!settings.FixSeqAfterSqliteMigration)
|
||||
{
|
||||
await FixSeqAfterSqliteMigration();
|
||||
settings.FixSeqAfterSqliteMigration = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -250,6 +256,17 @@ namespace BTCPayServer.Hosting
|
||||
}
|
||||
}
|
||||
|
||||
private async Task FixSeqAfterSqliteMigration()
|
||||
{
|
||||
await using var ctx = _DBContextFactory.CreateContext();
|
||||
if (!ctx.Database.IsNpgsql())
|
||||
return;
|
||||
var state = await ToPostgresMigrationStartupTask.GetMigrationState(ctx);
|
||||
if (state != "complete")
|
||||
return;
|
||||
await ToPostgresMigrationStartupTask.UpdateSequenceInvoiceSearch(ctx);
|
||||
}
|
||||
|
||||
#pragma warning disable CS0612 // Type or member is obsolete
|
||||
|
||||
static WalletBlobInfo GetBlobInfo(WalletData walletData)
|
||||
|
@ -264,6 +264,7 @@ namespace BTCPayServer.Hosting
|
||||
}
|
||||
await postgresContext.SaveChangesAsync();
|
||||
postgresContext.ChangeTracker.Clear();
|
||||
await UpdateSequenceInvoiceSearch(postgresContext);
|
||||
await SetMigrationState(postgresContext, migratingFrom, "complete");
|
||||
}
|
||||
otherContext.Dispose();
|
||||
@ -273,8 +274,12 @@ namespace BTCPayServer.Hosting
|
||||
Logger.LogInformation($"Migration to postgres from {migratingFrom} successful");
|
||||
}
|
||||
|
||||
internal static async Task UpdateSequenceInvoiceSearch(ApplicationDbContext postgresContext)
|
||||
{
|
||||
await postgresContext.Database.ExecuteSqlRawAsync("SELECT SETVAL('\"InvoiceSearches_Id_seq\"', (SELECT max(\"Id\") FROM \"InvoiceSearches\"));");
|
||||
}
|
||||
|
||||
private static async Task<string?> GetMigrationState(ApplicationDbContext postgresContext)
|
||||
internal static async Task<string?> GetMigrationState(ApplicationDbContext postgresContext)
|
||||
{
|
||||
var o = (await postgresContext.Settings.FromSqlRaw("SELECT \"Id\", \"Value\" FROM \"Settings\" WHERE \"Id\"='MigrationData'").AsNoTracking().FirstOrDefaultAsync())?.Value;
|
||||
if (o is null)
|
||||
|
@ -118,8 +118,6 @@ namespace BTCPayServer.Security.Greenfield
|
||||
if (context.HasPermission(Permission.Create(policy, store.Id), requiredUnscoped))
|
||||
permissionedStores.Add(store);
|
||||
}
|
||||
if (!requiredUnscoped && permissionedStores.Count is 0)
|
||||
break;
|
||||
_httpContext.SetStoresData(permissionedStores.ToArray());
|
||||
success = true;
|
||||
}
|
||||
|
@ -35,5 +35,6 @@ namespace BTCPayServer.Services
|
||||
public bool MigrateEmailServerDisableTLSCerts { get; set; }
|
||||
public bool MigrateWalletColors { get; set; }
|
||||
public bool FileSystemStorageAsDefault { get; set; }
|
||||
public bool FixSeqAfterSqliteMigration { get; set; }
|
||||
}
|
||||
}
|
||||
|
19
BTCPayServer/UserManagerExtensions.cs
Normal file
19
BTCPayServer/UserManagerExtensions.cs
Normal file
@ -0,0 +1,19 @@
|
||||
#nullable enable
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace BTCPayServer
|
||||
{
|
||||
public static class UserManagerExtensions
|
||||
{
|
||||
public async static Task<TUser?> FindByIdOrEmail<TUser>(this UserManager<TUser> userManager, string? idOrEmail) where TUser : class
|
||||
{
|
||||
if (string.IsNullOrEmpty(idOrEmail))
|
||||
return null;
|
||||
if (idOrEmail.Contains('@'))
|
||||
return await userManager.FindByEmailAsync(idOrEmail);
|
||||
else
|
||||
return await userManager.FindByIdAsync(idOrEmail);
|
||||
}
|
||||
}
|
||||
}
|
@ -3,13 +3,14 @@
|
||||
@inject BTCPayServer.Services.BTCPayServerEnvironment Env
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@{
|
||||
ViewData["Title"] = Model.Title;
|
||||
Layout = null;
|
||||
if (!string.IsNullOrEmpty(Model.DisqusShortname))
|
||||
{
|
||||
Csp.Add("script-src", $"https://{Model.DisqusShortname}.disqus.com");
|
||||
Csp.Add("script-src", "https://c.disquscdn.com");
|
||||
}
|
||||
ViewData["Title"] = Model.Title;
|
||||
Layout = null;
|
||||
Csp.UnsafeEval();
|
||||
if (!string.IsNullOrEmpty(Model.DisqusShortname))
|
||||
{
|
||||
Csp.Add("script-src", $"https://{Model.DisqusShortname}.disqus.com");
|
||||
Csp.Add("script-src", "https://c.disquscdn.com");
|
||||
}
|
||||
}
|
||||
<!DOCTYPE html>
|
||||
<html class="h-100" @(Env.IsDeveloping ? " data-devenv" : "")>
|
||||
@ -55,13 +56,13 @@
|
||||
<div class="public-page-wrap flex-column container" id="app" @(Model.SimpleDisplay ? "" : "v-cloak")>
|
||||
@if (!string.IsNullOrEmpty(Model.MainImageUrl))
|
||||
{
|
||||
<img v-if="srvModel.mainImageUrl" src="@Model.MainImageUrl" :src="srvModel.mainImageUrl" alt="@Model.Title" :alt="srvModel.title" id="crowdfund-main-image" asp-append-version="true"/>
|
||||
<img v-if="srvModel.mainImageUrl" :src="srvModel.mainImageUrl" :alt="srvModel.title" id="crowdfund-main-image" asp-append-version="true"/>
|
||||
}
|
||||
<div class="d-flex flex-column justify-content-between p-3 text-center" id="crowdfund-header-container">
|
||||
<h1 class="mb-3">@Model.Title</h1>
|
||||
<h1 class="mb-3">{{ srvModel.title }}</h1>
|
||||
@if (!string.IsNullOrEmpty(Model.Tagline))
|
||||
{
|
||||
<h2 class="h3 mb-3 fw-semibold" v-if="srvModel.tagline" v-text="srvModel.tagline">@Model.Tagline</h2>
|
||||
<h2 class="h3 mb-3 fw-semibold" v-if="srvModel.tagline" v-text="srvModel.tagline"></h2>
|
||||
}
|
||||
@if (Model.TargetAmount.HasValue)
|
||||
{
|
||||
@ -221,7 +222,6 @@
|
||||
<b-tabs>
|
||||
<b-tab title="Details" active>
|
||||
<div class="overflow-hidden pt-3" v-html="srvModel.description" id="crowdfund-body-description">
|
||||
@Safe.Raw(Model.Description)
|
||||
</div>
|
||||
</b-tab>
|
||||
<b-tab title="Discussion">
|
||||
@ -231,7 +231,6 @@
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="overflow-hidden" v-html="srvModel.description" id="crowdfund-body-description">
|
||||
@Safe.Raw(Model.Description)
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
@ -246,7 +245,7 @@
|
||||
</contribute>
|
||||
</div>
|
||||
</div>
|
||||
<noscript>
|
||||
<noscript v-pre>
|
||||
<div class="row justify-content-between">
|
||||
<div class="col-md-7 col-sm-12">
|
||||
<div class="overflow-hidden">@Safe.Raw(Model.Description)</div>
|
||||
@ -271,7 +270,7 @@
|
||||
</b-modal>
|
||||
|
||||
<footer class="store-footer">
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -4,9 +4,11 @@
|
||||
@using BTCPayServer.TagHelpers
|
||||
@using BTCPayServer.Views.Apps
|
||||
@using Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model BTCPayServer.Plugins.Crowdfund.Models.UpdateCrowdfundViewModel
|
||||
@{
|
||||
ViewData.SetActivePage(AppsNavPages.Update, "Update Crowdfund", Model.AppId);
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section PageHeadContent {
|
||||
|
@ -1,7 +1,9 @@
|
||||
@using BTCPayServer.Views.Stores
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model BTCPayServer.Plugins.PayButton.Models.PayButtonViewModel
|
||||
@{
|
||||
ViewData.SetActivePage(StoreNavPages.PayButton, "Pay Button", Context.GetStoreData().Id);
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section PageHeadContent {
|
||||
|
@ -320,7 +320,7 @@
|
||||
</button>
|
||||
|
||||
<footer class="store-footer">
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -1,6 +1,8 @@
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model BTCPayServer.Plugins.PointOfSale.Models.ViewPointOfSaleViewModel
|
||||
@{
|
||||
Layout = "PointOfSale/Public/_Layout";
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
@section PageHeadContent {
|
||||
<style>
|
||||
@ -123,7 +125,7 @@
|
||||
<partial name="PointOfSale/Public/VueLight" model="Model" />
|
||||
}
|
||||
<footer class="store-footer">
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -128,7 +128,7 @@ else
|
||||
</div>
|
||||
</main>
|
||||
<footer class="store-footer">
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -84,7 +84,7 @@
|
||||
</div>
|
||||
</main>
|
||||
<footer class="store-footer">
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -5,10 +5,11 @@
|
||||
@using BTCPayServer.Forms
|
||||
@using BTCPayServer.Services.Stores
|
||||
@inject FormDataService FormDataService
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model BTCPayServer.Plugins.PointOfSale.Models.UpdatePointOfSaleViewModel
|
||||
@{
|
||||
ViewData.SetActivePage(AppsNavPages.Update, "Update Point of Sale", Model.Id);
|
||||
|
||||
Csp.UnsafeEval();
|
||||
var checkoutFormOptions = await FormDataService.GetSelect(Model.StoreId, Model.FormId);
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
<table class="table my-0">
|
||||
<table class="table my-0" v-pre>
|
||||
@foreach (var (key, value) in Model.Items)
|
||||
{
|
||||
<tr>
|
||||
|
@ -8,7 +8,7 @@
|
||||
foreach (var error in errors.Errors)
|
||||
{
|
||||
<br/>
|
||||
<span class="text-danger">@error.ErrorMessage</span>
|
||||
<span class="text-danger" v-pre>@error.ErrorMessage</span>
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
@await RenderSectionAsync("PageHeadContent", false)
|
||||
</head>
|
||||
<body class="d-flex flex-column flex-lg-row min-vh-100">
|
||||
<header id="mainMenu" class="btcpay-header d-flex flex-column">
|
||||
<header id="mainMenu" class="btcpay-header d-flex flex-column" v-pre>
|
||||
<div id="mainMenuHead">
|
||||
<button id="mainMenuToggle" class="mainMenuButton" type="button" data-bs-toggle="offcanvas" data-bs-target="#mainNav" aria-controls="mainNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span>Menu</span>
|
||||
|
@ -1,4 +1,4 @@
|
||||
@{
|
||||
@{
|
||||
Layout = "_LayoutSimple";
|
||||
ViewBag.ShowTitle ??= true;
|
||||
ViewBag.ShowLeadText ??= false;
|
||||
@ -50,7 +50,7 @@
|
||||
<div class="account-form">
|
||||
@if (ViewBag.ShowTitle)
|
||||
{
|
||||
<h4>@ViewData["Title"]</h4>
|
||||
<h4 v-pre>@ViewData["Title"]</h4>
|
||||
}
|
||||
@RenderBody()
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
@if (parsedModel != null)
|
||||
{
|
||||
<div class="alert alert-@parsedModel.SeverityCSS @(parsedModel.AllowDismiss? "alert-dismissible":"" ) @(ViewData["Margin"] ?? "mb-4") text-break" role="alert">
|
||||
<div class="alert alert-@parsedModel.SeverityCSS @(parsedModel.AllowDismiss? "alert-dismissible":"" ) @(ViewData["Margin"] ?? "mb-4") text-break" role="alert" v-pre>
|
||||
@if (parsedModel.AllowDismiss)
|
||||
{
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
|
||||
|
@ -7,7 +7,7 @@
|
||||
? await FileService.GetFileUrl(Context.Request.GetAbsoluteRootUri(), Model.LogoFileId)
|
||||
: null;
|
||||
}
|
||||
<header class="store-header">
|
||||
<header class="store-header" v-pre>
|
||||
@if (!string.IsNullOrEmpty(logoUrl))
|
||||
{
|
||||
<img src="@logoUrl" alt="@Model.Title" class="store-logo"/>
|
||||
|
@ -1,8 +1,10 @@
|
||||
@model LoginViewModel
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@inject BTCPayServer.Services.PoliciesSettings PoliciesSettings
|
||||
@{
|
||||
ViewData["Title"] = "Sign in";
|
||||
Layout = "_LayoutSignedOut";
|
||||
ViewData["Title"] = "Sign in";
|
||||
Layout = "_LayoutSignedOut";
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
<form asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" id="login-form" asp-action="Login">
|
||||
|
@ -1,9 +1,11 @@
|
||||
@using BTCPayServer.Views.Apps
|
||||
@using BTCPayServer.Abstractions.Extensions
|
||||
@using BTCPayServer.Abstractions.Custodians
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model BTCPayServer.Models.CustodianAccountViewModels.ViewCustodianAccountViewModel
|
||||
@{
|
||||
ViewData.SetActivePage(AppsNavPages.Create, "Custodian account: " + @Model?.CustodianAccount.Name);
|
||||
ViewData.SetActivePage(AppsNavPages.Create, "Custodian account: " + @Model?.CustodianAccount.Name);
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section PageHeadContent
|
||||
|
@ -47,7 +47,7 @@
|
||||
</div>
|
||||
</main>
|
||||
<footer class="store-footer">
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -1,9 +1,11 @@
|
||||
@inject BTCPayServer.Services.LanguageService langService
|
||||
@inject BTCPayServer.Services.BTCPayServerEnvironment env
|
||||
@inject PaymentMethodHandlerDictionary PaymentMethodHandlerDictionary
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model PaymentModel
|
||||
@{
|
||||
Layout = null;
|
||||
Layout = null;
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
@ -5,12 +5,13 @@
|
||||
@inject BTCPayServerEnvironment Env
|
||||
@inject IEnumerable<IUIExtension> UiExtensions
|
||||
@inject PaymentMethodHandlerDictionary PaymentMethodHandlerDictionary
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model PaymentModel
|
||||
@{
|
||||
Layout = null;
|
||||
ViewData["Title"] = Model.HtmlTitle;
|
||||
|
||||
var hasPaymentPlugins = UiExtensions.Any(extension => extension.Location == "checkout-payment-method");
|
||||
Layout = null;
|
||||
ViewData["Title"] = Model.HtmlTitle;
|
||||
Csp.UnsafeEval();
|
||||
var hasPaymentPlugins = UiExtensions.Any(extension => extension.Location == "checkout-payment-method");
|
||||
// Show LNURL as selectable payment method only for top up invoices + non-BIP21 case
|
||||
var displayedPaymentMethods = Model.IsUnsetTopUp && !Model.OnChainWithLnInvoiceFallback
|
||||
? Model.AvailableCryptos
|
||||
@ -49,7 +50,7 @@
|
||||
<section id="payment" v-if="isActive">
|
||||
@if (!string.IsNullOrEmpty(Model.ItemDesc) && Model.ItemDesc != Model.StoreName)
|
||||
{
|
||||
<h5 class="text-center mt-1 mb-3 fw-semibold" v-if="srvModel.itemDesc" v-text="srvModel.itemDesc">@Model.ItemDesc</h5>
|
||||
<h5 class="text-center mt-1 mb-3 fw-semibold" v-if="srvModel.itemDesc" v-text="srvModel.itemDesc"></h5>
|
||||
}
|
||||
@if (Model.IsUnsetTopUp)
|
||||
{
|
||||
@ -106,17 +107,19 @@
|
||||
<vc:icon symbol="payment-complete"/>
|
||||
</span>
|
||||
<h4 v-t="'invoice_paid'"></h4>
|
||||
<dl class="mb-0">
|
||||
<div>
|
||||
<dt v-t="'invoice_id'"></dt>
|
||||
<dd v-text="srvModel.invoiceId"></dd>
|
||||
</div>
|
||||
<div v-if="srvModel.orderId">
|
||||
<dt v-t="'order_id'"></dt>
|
||||
<dd v-text="srvModel.orderId"></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<payment-details :srv-model="srvModel" :is-active="isActive" class="mb-5"></payment-details>
|
||||
<div id="PaymentDetails" class="payment-details">
|
||||
<dl class="mb-0">
|
||||
<div>
|
||||
<dt v-t="'invoice_id'"></dt>
|
||||
<dd v-text="srvModel.invoiceId" :data-clipboard="srvModel.invoiceId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
</div>
|
||||
<div v-if="srvModel.orderId">
|
||||
<dt v-t="'order_id'"></dt>
|
||||
<dd v-text="srvModel.orderId" :data-clipboard="srvModel.orderId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<payment-details :srv-model="srvModel" :is-active="isActive" class="mb-5"></payment-details>
|
||||
</div>
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<a v-if="srvModel.receiptLink" class="btn btn-primary rounded-pill w-100" :href="srvModel.receiptLink" :target="isModal ? '_top' : null" v-t="'view_receipt'" id="ReceiptLink"></a>
|
||||
@ -130,18 +133,18 @@
|
||||
<vc:icon symbol="invoice-expired"/>
|
||||
</span>
|
||||
<h4 v-t="'invoice_expired'"></h4>
|
||||
<dl class="mb-0">
|
||||
<div>
|
||||
<dt v-t="'invoice_id'"></dt>
|
||||
<dd v-text="srvModel.invoiceId"></dd>
|
||||
</div>
|
||||
<div v-if="srvModel.orderId">
|
||||
<dt v-t="'order_id'"></dt>
|
||||
<dd v-text="srvModel.orderId"></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<div id="PaymentDetails" class="payment-details" v-collapsible="displayPaymentDetails">
|
||||
<payment-details :srv-model="srvModel" :is-active="isActive"></payment-details>
|
||||
<div id="PaymentDetails" class="payment-details">
|
||||
<dl class="mb-0">
|
||||
<div>
|
||||
<dt v-t="'invoice_id'"></dt>
|
||||
<dd v-text="srvModel.invoiceId" :data-clipboard="srvModel.invoiceId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
</div>
|
||||
<div v-if="srvModel.orderId">
|
||||
<dt v-t="'order_id'"></dt>
|
||||
<dd v-text="srvModel.orderId" :data-clipboard="srvModel.orderId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<payment-details :srv-model="srvModel" :is-active="isActive" v-collapsible="displayPaymentDetails"></payment-details>
|
||||
</div>
|
||||
<button class="d-flex align-items-center gap-1 btn btn-link payment-details-button" type="button" :aria-expanded="displayPaymentDetails ? 'true' : 'false'" v-on:click="displayPaymentDetails = !displayPaymentDetails">
|
||||
<span class="fw-semibold" v-t="'view_details'"></span>
|
||||
@ -164,9 +167,7 @@
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
{{$t("powered_by")}} <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
@* TODO: Re-add this once checkout v2 has been translated
|
||||
<select asp-for="DefaultLang" asp-items="@LangService.GetLanguageSelectListItems()" class="form-select w-auto" v-on:change="changeLanguage"></select>
|
||||
*@
|
||||
<select asp-for="DefaultLang" asp-items="@LangService.GetLanguageSelectListItems()" class="form-select" v-on:change="changeLanguage"></select>
|
||||
</footer>
|
||||
</div>
|
||||
<noscript>
|
||||
|
@ -168,7 +168,7 @@
|
||||
Admin details
|
||||
</a>
|
||||
</p>
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -1,8 +1,10 @@
|
||||
@namespace BTCPayServer.Client
|
||||
@using BTCPayServer.Abstractions.Models
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model BTCPayServer.Controllers.UIManageController.ApiKeysViewModel
|
||||
@{
|
||||
ViewData.SetActivePage(ManageNavPages.APIKeys, "API Keys");
|
||||
ViewData.SetActivePage(ManageNavPages.APIKeys, "API Keys");
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
<div class="row">
|
||||
|
@ -3,9 +3,11 @@
|
||||
@using BTCPayServer.Client
|
||||
@model BTCPayServer.Models.PaymentRequestViewModels.ViewPaymentRequestViewModel
|
||||
@inject BTCPayServer.Services.BTCPayServerEnvironment Env
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@{
|
||||
ViewData["Title"] = Model.Title;
|
||||
Layout = null;
|
||||
ViewData["Title"] = Model.Title;
|
||||
Csp.UnsafeEval();
|
||||
Layout = null;
|
||||
string StatusClass(InvoiceState state)
|
||||
{
|
||||
switch (state.Status.ToModernStatus())
|
||||
@ -68,7 +70,7 @@
|
||||
<div class="col-12 col-md-8 col-lg-9">
|
||||
<div class="row">
|
||||
<div class="col col-12 col-lg-8">
|
||||
<h1 class="h3" v-text="srvModel.title">@Model.Title</h1>
|
||||
<h1 class="h3" v-text="srvModel.title"></h1>
|
||||
</div>
|
||||
<div class="col col-12 col-sm-6 col-lg-8 d-flex align-items-center">
|
||||
<span class="text-muted text-nowrap">Last Updated</span>
|
||||
@ -204,9 +206,7 @@
|
||||
<h2 class="h4 mb-3">Invoice Summary</h2>
|
||||
@if (!string.IsNullOrEmpty(Model.Description) && Model.Description != "<br>")
|
||||
{
|
||||
<div v-html="srvModel.description">
|
||||
@Safe.Raw(Model.Description)
|
||||
</div>
|
||||
<div v-html="srvModel.description"></div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -375,7 +375,7 @@
|
||||
Edit payment request
|
||||
</a>
|
||||
</p>
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -4,9 +4,11 @@
|
||||
@using BTCPayServer.Components.ThemeSwitch
|
||||
@using BTCPayServer.Payments
|
||||
@model BTCPayServer.Models.ViewPullPaymentModel
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
|
||||
@{
|
||||
ViewData["Title"] = Model.Title;
|
||||
Csp.UnsafeEval();
|
||||
Layout = null;
|
||||
string StatusTextClass(string status)
|
||||
{
|
||||
@ -213,7 +215,7 @@
|
||||
Edit pull payment
|
||||
</a>
|
||||
</p>
|
||||
<a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
<a class="store-powered-by" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">
|
||||
Powered by <partial name="_StoreFooterLogo" />
|
||||
</a>
|
||||
</footer>
|
||||
|
@ -33,6 +33,10 @@
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-8-0/" target="_blank" rel="noreferrer noopener">v1.8.0</a></h5>
|
||||
<p class="mb-2">Bear markets are for building: This version brings custom checkout forms, store branding options, a redesigned Point of Sale keypad view, new notification icons and address labeling.</p>
|
||||
<p class="mb-0">You like that? Consider <a href="https://opensats.org/projects/btcpayserver" target="_blank" rel="noreferrer noopener">supporting BTCPay Server via OpenSats</a>.</p>
|
||||
<hr style="height:1px;background-color:var(--btcpay-body-text-muted);margin:var(--btcpay-space-m) 0;" />
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-7-0/" target="_blank" rel="noreferrer noopener">v1.7.0</a></h5>
|
||||
<p class="mb-2">We've redesigned the checkout and the new version is available as an opt-in feature. We're looking forward to your <a href="https://github.com/btcpayserver/btcpayserver/discussions/4308" target="_blank" rel="noreferrer noopener">feedback</a>!</p>
|
||||
<p class="mb-0">You can now also request customer data (e.g. their shipping address) when they pay an invoice.</p>
|
||||
@ -40,9 +44,6 @@
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-6-0/" target="_blank" rel="noreferrer noopener">v1.6.0</a></h5>
|
||||
<p class="mb-2">The dashboard now contains your Lightning balances and services, as well as Point of Sale statistics.</p>
|
||||
<p class="mb-0">We've also added invoice receipts and LNURL withdraw for payouts.</p>
|
||||
<hr style="height:1px;background-color:var(--btcpay-body-text-muted);margin:var(--btcpay-space-m) 0;" />
|
||||
<h5 class="alert-heading">Updated in <a href="https://blog.btcpayserver.org/btcpay-server-1-5-0/" target="_blank" rel="noreferrer noopener">v1.5.0</a></h5>
|
||||
<p class="mb-0">Stores now have a neat dashboard like the one you see here! 🗠🎉</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,7 +1,9 @@
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model WalletSetupViewModel
|
||||
@{
|
||||
Layout = "_LayoutWalletSetup";
|
||||
ViewData.SetActivePage(StoreNavPages.OnchainSettings, "Scan QR code", Context.GetStoreData().Id);
|
||||
Layout = "_LayoutWalletSetup";
|
||||
ViewData.SetActivePage(StoreNavPages.OnchainSettings, "Scan QR code", Context.GetStoreData().Id);
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section Navbar {
|
||||
|
@ -2,11 +2,13 @@
|
||||
@using Newtonsoft.Json
|
||||
@using System.Text
|
||||
@using BTCPayServer.Abstractions.Models
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model WalletSettingsViewModel
|
||||
@{
|
||||
Layout = "../Shared/_NavLayout.cshtml";
|
||||
ViewData["NavPartialName"] = "../UIWallets/_Nav";
|
||||
ViewData.SetActivePage(StoreNavPages.OnchainSettings, $"{Model.CryptoCode} Wallet Settings", Context.GetStoreData().Id);
|
||||
Layout = "../Shared/_NavLayout.cshtml";
|
||||
ViewData["NavPartialName"] = "../UIWallets/_Nav";
|
||||
ViewData.SetActivePage(StoreNavPages.OnchainSettings, $"{Model.CryptoCode} Wallet Settings", Context.GetStoreData().Id);
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section PageHeadContent {
|
||||
|
@ -1,11 +1,13 @@
|
||||
@using BTCPayServer.Controllers
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model WalletPSBTViewModel
|
||||
@{
|
||||
var walletId = Context.GetRouteValue("walletId").ToString();
|
||||
var cancelUrl = Model.ReturnUrl ?? Url.Action(nameof(UIWalletsController.WalletTransactions), new { walletId });
|
||||
var backUrl = Model.BackUrl != null ? $"{Model.BackUrl}?returnUrl={Model.ReturnUrl}" : null;
|
||||
Layout = "_LayoutWizard";
|
||||
ViewData.SetActivePage(WalletsNavPages.PSBT, "Decode PSBT", walletId);
|
||||
var walletId = Context.GetRouteValue("walletId").ToString();
|
||||
var cancelUrl = Model.ReturnUrl ?? Url.Action(nameof(UIWalletsController.WalletTransactions), new { walletId });
|
||||
var backUrl = Model.BackUrl != null ? $"{Model.BackUrl}?returnUrl={Model.ReturnUrl}" : null;
|
||||
Layout = "_LayoutWizard";
|
||||
ViewData.SetActivePage(WalletsNavPages.PSBT, "Decode PSBT", walletId);
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section Navbar {
|
||||
|
@ -1,14 +1,16 @@
|
||||
@using BTCPayServer.Controllers
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model WalletPSBTViewModel
|
||||
@{
|
||||
var walletId = Context.GetRouteValue("walletId").ToString();
|
||||
var cancelUrl = Model.ReturnUrl ?? Url.Action(nameof(UIWalletsController.WalletTransactions), new { walletId });
|
||||
var backUrl = Model.BackUrl != null ? $"{Model.BackUrl}?returnUrl={Model.ReturnUrl}" : null;
|
||||
var cancelUrl = Model.ReturnUrl ?? Url.Action(nameof(UIWalletsController.WalletTransactions), new { walletId });
|
||||
var backUrl = Model.BackUrl != null ? $"{Model.BackUrl}?returnUrl={Model.ReturnUrl}" : null;
|
||||
var isReady = !Model.HasErrors;
|
||||
var isSignable = !isReady;
|
||||
var needsExport = !isSignable && !isReady;
|
||||
Layout = "_LayoutWizard";
|
||||
ViewData.SetActivePage(WalletsNavPages.PSBT, isReady ? "Confirm broadcasting this transaction" : "Transaction Details", walletId);
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section PageHeadContent {
|
||||
|
@ -1,14 +1,16 @@
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies csp
|
||||
@using Microsoft.AspNetCore.Mvc.ModelBinding
|
||||
@using BTCPayServer.Controllers
|
||||
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||||
@model WalletSendModel
|
||||
@{
|
||||
var walletId = Context.GetRouteValue("walletId").ToString();
|
||||
var cancelUrl = Model.ReturnUrl ?? Url.Action(nameof(UIWalletsController.WalletTransactions), new { walletId });
|
||||
var backUrl = Model.BackUrl != null ? $"{Model.BackUrl}?returnUrl={Model.ReturnUrl}" : null;
|
||||
Layout = "_LayoutWizard";
|
||||
ViewData.SetActivePage(WalletsNavPages.Send, $"Send {Model.CryptoCode}", walletId);
|
||||
csp.Add("worker-src", "blob:");
|
||||
var walletId = Context.GetRouteValue("walletId").ToString();
|
||||
var cancelUrl = Model.ReturnUrl ?? Url.Action(nameof(UIWalletsController.WalletTransactions), new { walletId });
|
||||
var backUrl = Model.BackUrl != null ? $"{Model.BackUrl}?returnUrl={Model.ReturnUrl}" : null;
|
||||
Layout = "_LayoutWizard";
|
||||
ViewData.SetActivePage(WalletsNavPages.Send, $"Send {Model.CryptoCode}", walletId);
|
||||
csp.Add("worker-src", "blob:");
|
||||
Csp.UnsafeEval();
|
||||
}
|
||||
|
||||
@section Navbar {
|
||||
|
@ -168,13 +168,12 @@ section dl > div dd {
|
||||
color: var(--btcpay-body-text-muted);
|
||||
}
|
||||
#DefaultLang {
|
||||
width: calc(var(--text-width, 110px) + 3rem);
|
||||
color: var(--btcpay-body-text-muted);
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
text-align: right;
|
||||
cursor: pointer;
|
||||
margin-left: -4.5rem; /* Adjust for visual center */
|
||||
}
|
||||
#DefaultLang:hover {
|
||||
color: var(--btcpay-body-text-hover);
|
||||
|
@ -51,11 +51,23 @@ function isLanguageAvailable(languageCode) {
|
||||
return availableLanguages.includes(languageCode);
|
||||
}
|
||||
|
||||
function updateLanguageSelect() {
|
||||
// calculate and set width, as we want it center aligned
|
||||
const $languageSelect = document.getElementById('DefaultLang');
|
||||
const element = document.createElement('div');
|
||||
element.innerText = $languageSelect.querySelector('option:checked').text;
|
||||
$languageSelect.parentElement.appendChild(element);
|
||||
const width = element.offsetWidth;
|
||||
$languageSelect.parentElement.removeChild(element);
|
||||
$languageSelect.style.setProperty('--text-width', `${width}px`);
|
||||
}
|
||||
|
||||
function updateLanguage(lang) {
|
||||
if (isLanguageAvailable(lang)) {
|
||||
i18next.changeLanguage(lang);
|
||||
urlParams.set('lang', lang);
|
||||
window.history.replaceState({}, '', `${location.pathname}?${urlParams}`);
|
||||
updateLanguageSelect();
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,6 +189,7 @@ function initApp() {
|
||||
if (this.isActive) {
|
||||
this.listenIn();
|
||||
}
|
||||
updateLanguageSelect();
|
||||
window.parent.postMessage('loaded', '*');
|
||||
},
|
||||
methods: {
|
||||
|
@ -24,7 +24,6 @@
|
||||
<symbol id="new-store" viewBox="0 0 32 32" fill="none"><path d="M16 10V22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M22 16H10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><circle fill="none" cx="16" cy="16" r="15" stroke="currentColor" stroke-width="2"/></symbol>
|
||||
<symbol id="new-wallet" viewBox="0 0 32 32" fill="none"><path d="M16 10V22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M22 16H10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><circle fill="none" cx="16" cy="16" r="15" stroke="currentColor" stroke-width="2"/></symbol>
|
||||
<symbol id="new" viewBox="0 0 24 24" fill="none"><path d="M17 11H13V7C13 6.45 12.55 6 12 6C11.45 6 11 6.45 11 7V11H7C6.45 11 6 11.45 6 12C6 12.55 6.45 13 7 13H11V17C11 17.55 11.45 18 12 18C12.55 18 13 17.55 13 17V13H17C17.55 13 18 12.55 18 12C18 11.45 17.55 11 17 11Z" fill="currentColor"/></symbol>
|
||||
<symbol id="remove" viewBox="0 0 24 24" fill="none"><path d="M17 11H13V7C13 6.45 12.55 6 12 6C11.45 6 11 6.45 11 7V11H7C6.45 11 6 11.45 6 12C6 12.55 6.45 13 7 13H11V17C11 17.55 11.45 18 12 18C12.55 18 13 17.55 13 17V13H17C17.55 13 18 12.55 18 12C18 11.45 17.55 11 17 11Z" fill="currentColor" transform="rotate(45 12 12)"/></symbol>
|
||||
<symbol id="note" viewBox="0 0 16 16" fill="none"><path d="M14.2 16H1.8C.808 16 0 15.192 0 14.2V1.8C0 .808.808 0 1.8 0h12.4c.992 0 1.8.808 1.8 1.8v12.4c0 .992-.808 1.8-1.8 1.8zM1.8 1.2a.6.6 0 00-.6.6v12.4c0 .33.269.6.6.6h12.4a.6.6 0 00.6-.6V1.8a.6.6 0 00-.6-.6H1.8z" fill="currentColor"/><path d="M12 5.312H4a.6.6 0 010-1.2h8a.6.6 0 110 1.2zM12 8.6H4a.6.6 0 010-1.2h8a.6.6 0 010 1.2zm-4 3.288H4a.6.6 0 110-1.2h4a.6.6 0 010 1.2z" fill="currentColor"/></symbol>
|
||||
<symbol id="notifications" viewBox="0 0 24 24" fill="none"><path d="M12.1933 0.992188C17.152 0.992188 19.2346 5.35582 19.7305 7.04178C20.3255 9.12442 19.8297 10.017 20.3255 12.893C20.6231 14.7773 21.6148 16.3641 22.4082 17.2567C22.7057 17.5542 22.4082 18.05 22.0115 18.05H13.2842H12.1933H2.07762C1.68092 18.05 1.3834 17.5542 1.68092 17.2567C2.37514 16.3641 3.46605 14.7773 3.76357 12.893C4.16026 10.017 3.76357 9.12442 4.35861 7.04178C4.85448 5.35582 7.03629 0.992188 12.1933 0.992188Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/><path d="M16.2595 18.0488C16.2595 18.2472 16.3586 18.5447 16.3586 18.743C16.3586 21.1232 14.4743 23.0075 12.0942 23.0075C9.71401 23.0075 7.82971 21.1232 7.82971 18.743C7.82971 18.5447 7.82971 18.3463 7.82971 18.148" fill="none" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/></symbol>
|
||||
<symbol id="notifications-invoice-failure" viewBox="0 0 24 24" fill="none"><path d="M3.51481 20.4858C2.40048 19.3715 1.51654 18.0486 0.913469 16.5926C0.310397 15.1367 1.17414e-08 13.5762 0 12.0003C-1.17414e-08 10.4244 0.310397 8.86393 0.913469 7.40799C1.51654 5.95204 2.40048 4.62914 3.51481 3.51481C4.62914 2.40048 5.95204 1.51654 7.40799 0.913469C8.86393 0.310397 10.4244 -1.17414e-08 12.0003 0C13.5762 1.17414e-08 15.1367 0.310397 16.5926 0.913469C18.0486 1.51654 19.3715 2.40048 20.4858 3.51481C22.7363 5.7653 24.0006 8.81763 24.0006 12.0003C24.0006 15.183 22.7363 18.2353 20.4858 20.4858C18.2353 22.7363 15.183 24.0006 12.0003 24.0006C8.81763 24.0006 5.7653 22.7363 3.51481 20.4858ZM9.04531 7.45531C8.83205 7.25659 8.54998 7.1484 8.25852 7.15355C7.96707 7.15869 7.689 7.27676 7.48288 7.48288C7.27676 7.689 7.15869 7.96707 7.15355 8.25852C7.1484 8.54998 7.25659 8.83205 7.45531 9.04531L10.4103 12.0003L7.45531 14.9553C7.34478 15.0583 7.25613 15.1825 7.19464 15.3205C7.13315 15.4585 7.10009 15.6075 7.09742 15.7585C7.09476 15.9096 7.12254 16.0596 7.17912 16.1997C7.23571 16.3398 7.31992 16.467 7.42675 16.5739C7.53358 16.6807 7.66083 16.7649 7.80091 16.8215C7.94099 16.8781 8.09104 16.9059 8.24209 16.9032C8.39315 16.9005 8.54212 16.8675 8.68012 16.806C8.81812 16.7445 8.94232 16.6558 9.04531 16.5453L12.0003 13.5903L14.9553 16.5453C15.0583 16.6558 15.1825 16.7445 15.3205 16.806C15.4585 16.8675 15.6075 16.9005 15.7585 16.9032C15.9096 16.9059 16.0596 16.8781 16.1997 16.8215C16.3398 16.7649 16.467 16.6807 16.5739 16.5739C16.6807 16.467 16.7649 16.3398 16.8215 16.1997C16.8781 16.0596 16.9059 15.9096 16.9032 15.7585C16.9005 15.6075 16.8675 15.4585 16.806 15.3205C16.7445 15.1825 16.6558 15.0583 16.5453 14.9553L13.5903 12.0003L16.5453 9.04531C16.6558 8.94232 16.7445 8.81812 16.806 8.68012C16.8675 8.54212 16.9005 8.39315 16.9032 8.24209C16.9059 8.09104 16.8781 7.94099 16.8215 7.80091C16.7649 7.66083 16.6807 7.53358 16.5739 7.42675C16.467 7.31992 16.3398 7.23571 16.1997 7.17912C16.0596 7.12254 15.9096 7.09476 15.7585 7.09742C15.6075 7.10009 15.4585 7.13315 15.3205 7.19464C15.1825 7.25613 15.0583 7.34478 14.9553 7.45531L12.0003 10.4103L9.04531 7.45531Z" fill="#E11900"/></symbol>
|
||||
@ -44,6 +43,7 @@
|
||||
<symbol id="pos-print" viewBox="0 0 24 24" fill="none"><path d="M5 6v13.543l2.333-.914L9.667 20 12 18.629 14.333 20l2.334-1.371 2.333.914V6a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2Z" stroke="currentColor" stroke-width="1.6"/><path d="M8.5 8h7M8.5 11.5h7M8.5 15h4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></symbol>
|
||||
<symbol id="pos-static" viewBox="0 0 24 24" fill="none"><path d="M19.05 10.266v6.265a2.244 2.244 0 0 1-2.238 2.238H7.246a2.244 2.244 0 0 1-2.238-2.238v-6.265" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/><path d="M9.455 5.262v3.833c0 1.174-.951 2.153-2.126 2.153h-.42a2.613 2.613 0 0 1-2.405-3.664l.56-1.315A1.702 1.702 0 0 1 6.63 5.234l2.825.028ZM14.547 5.258V9.09c0 1.175.95 2.154 2.126 2.154h.42c1.901 0 3.16-1.93 2.405-3.665l-.56-1.314a1.721 1.721 0 0 0-1.566-1.007h-2.825ZM12.002 11.499A2.525 2.525 0 0 1 9.484 8.98V5.29h5.063v3.692c0 1.399-1.147 2.518-2.545 2.518Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/></symbol>
|
||||
<symbol id="pull-payments" viewBox="0 0 24 24" fill="none"><path d="M12 20a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-15.19a7.2 7.2 0 0 0 0 14.38A7.2 7.2 0 0 0 12 4.8Z" fill="currentColor" stroke="currentColor" stroke-width=".6"/><path d="M9.48 14.85a.44.44 0 0 1-.3-.14c-.14-.16-.14-.43.05-.57l5.02-4.31c.16-.14.43-.14.57.05.14.17.14.44-.05.57l-5.05 4.29c-.05.08-.16.1-.24.1Z" fill="currentColor" stroke="currentColor" stroke-width=".6"/><path d="M14.39 14.28a.4.4 0 0 1-.41-.4l.1-3.42-3.08-.17a.4.4 0 0 1-.38-.43c0-.22.19-.4.43-.38l3.47.19c.22 0 .38.19.38.4l-.13 3.83c.02.19-.17.38-.38.38Z" fill="currentColor" stroke="currentColor" stroke-width=".6"/></symbol>
|
||||
<symbol id="remove" viewBox="0 0 24 24" fill="none"><path d="M17 11H13V7C13 6.45 12.55 6 12 6C11.45 6 11 6.45 11 7V11H7C6.45 11 6 11.45 6 12C6 12.55 6.45 13 7 13H11V17C11 17.55 11.45 18 12 18C12.55 18 13 17.55 13 17V13H17C17.55 13 18 12.55 18 12C18 11.45 17.55 11 17 11Z" fill="currentColor" transform="rotate(45 12 12)"/></symbol>
|
||||
<symbol id="rtl" viewBox="0 0 610 524" fill="none"><path d="M418.62 107.6c1.95 4.6 2.73 8.24 2.63 10.24-7.56-4.56-18.93-8.43-25.14-9.54-4.03-.72 9.18-3.93 22.51-.7m10.99 169.33a476.42 476.42 0 0 1 14.43-2.8 447.25 447.25 0 0 0-5.98-3.71c-25.45-15.5-52.58-28.64-79.4-41.37-16.91-8.03-34.15-16.02-51.7-23.22 15.31-20.19 34.91-37.32 55.86-52 .02 0 .1-.07.23-.16 4.59 6.26 10.38 10.51 13.29 12.11 5.68 3.13 12.84 6.06 19.41 6.95a110.45 110.45 0 0 0 35.44-.55c1.06-.18 2.14-.3 3.2-.49a105.01 105.01 0 0 1 16.87-1.54c5.88-.1 8.79 1.14 9.48 1.32 2.1.54 3.89 1.44 4.88 2.64a39.71 39.71 0 0 0 3.7 4.13c3.96 3.93 7.89 6.11 13.58 6.74 7.34.8 12.53-2.07 16.2-6.83 1.74-2.25.9-5.78.71-6.47-.96-3.55-3.18-8.7-4.8-13.5a27.3 27.3 0 0 0-4.86-7.64l-2.42-2.56c-3.78-4-7.59-7.96-11.36-11.95-15.06-15.92-31.38-30.58-48.21-44.59l-5.24-4.36-3.82-3.16a1032.74 1032.74 0 0 0-6.06-4.96l-1.63-1.31c-.86-.7-2.81-2.34-4.46-3.66 5.46-5.44 9.86-8.83 17.68-13.95 1.12-.74 7.16-3.96 6.95-4.78-.13-.49-10.05-.38-21.4 1.09-4 .51-26.38 3.81-41.74 7.16-16.35 3.56-33.62 8.55-49.53 13.55-45.94 14.47-89.81 34.07-129.99 60.7-23.09 15.32-44.7 32.21-65.56 50.42a1066.8 1066.8 0 0 0-28.81 25.95 696.64 696.64 0 0 0-4.41 4.19c2 .37 4.01.76 6.02 1.18 16.6 3.4 33.04 7.97 49.02 12.53 19.53 5.59 39.3 11.6 58.41 19a583.18 583.18 0 0 0-31.63 32.21 765.5 765.5 0 0 0-53.37 66.63c-21.6 30.15-40.02 62.67-56.09 96.17a765.04 765.04 0 0 0-4.5 9.54c2.97-2.38 5.96-4.74 8.97-7.08 26.01-20.17 53.44-38.82 80.82-56.84 38.53-25.35 79.88-46.3 122.78-63.16 51.73-20.32 104.56-40.03 159.04-51.57" fill="currentColor"/></symbol>
|
||||
<symbol id="scan-qr" viewBox="0 0 32 32" fill="none"><path d="M20 .875h10c.621 0 1.125.504 1.125 1.125v10m0 8v10c0 .621-.504 1.125-1.125 1.125H20m-8 0H2A1.125 1.125 0 01.875 30V20m0-8V2C.875 1.379 1.379.875 2 .875h10" stroke="currentColor" stroke-width="1.75" fill="none" fill-rule="evenodd"/></symbol>
|
||||
<symbol id="seed" viewBox="0 0 32 32" fill="none"><rect x="0.875" y="2.875" width="30.25" height="26.25" rx="1.125" fill="none" stroke="currentColor" stroke-width="1.75"/><rect x="5" y="7" width="9" height="4" rx="0.5" fill="currentColor"/><rect x="5" y="14" width="9" height="4" rx="0.5" fill="currentColor"/><rect x="18" y="7" width="9" height="4" rx="0.5" fill="currentColor"/><rect x="18" y="14" width="9" height="4" rx="0.5" fill="currentColor"/><rect x="5" y="21" width="9" height="4" rx="0.5" fill="currentColor"/><rect x="18" y="21" width="9" height="4" rx="0.5" fill="currentColor"/></symbol>
|
||||
@ -60,4 +60,4 @@
|
||||
<symbol id="warning" viewBox="0 0 24 24" fill="none"><path d="M12.337 3.101a.383.383 0 00-.674 0l-9.32 17.434a.383.383 0 00.338.564h18.638a.384.384 0 00.337-.564L12.337 3.101zM9.636 2.018c1.01-1.89 3.719-1.89 4.728 0l9.32 17.434a2.681 2.681 0 01-2.365 3.945H2.681a2.68 2.68 0 01-2.364-3.945L9.636 2.018zm3.896 15.25a1.532 1.532 0 11-3.064 0 1.532 1.532 0 013.064 0zm-.383-8.044a1.15 1.15 0 00-2.298 0v3.83a1.15 1.15 0 002.298 0v-3.83z" fill="currentColor"/></symbol>
|
||||
<symbol id="watchonly-wallet" viewBox="0 0 32 32" fill="none"><path d="M26.5362 7.08746H25.9614V3.25512C25.9614 2.10542 25.3865 1.14734 24.6201 0.572488C23.8536 -0.00236247 22.7039 -0.193979 21.7458 -0.00236246L4.11707 5.36291C2.00929 5.93776 0.667969 7.85392 0.667969 9.96171V12.0695V12.836V27.3988C0.667969 30.0815 2.77575 32.1893 5.45839 32.1893H26.5362C29.2189 32.1893 31.3267 30.0815 31.3267 27.3988V12.0695C31.3267 9.38686 29.2189 7.08746 26.5362 7.08746ZM4.69192 7.08746L22.129 1.91381C22.5123 1.72219 23.0871 1.91381 23.4704 2.10542C23.8536 2.29704 24.0452 2.87189 24.0452 3.25512V7.08746H5.45839C4.88354 7.08746 4.5003 7.27908 3.92545 7.47069C4.11707 7.27908 4.5003 7.08746 4.69192 7.08746ZM29.4105 27.2072C29.4105 28.7402 28.0692 30.0815 26.5362 30.0815H5.45839C3.92545 30.0815 2.58414 28.7402 2.58414 27.2072V12.836V11.8779C2.58414 10.3449 3.92545 9.00362 5.45839 9.00362H26.5362C28.0692 9.00362 29.4105 10.3449 29.4105 11.8779V27.2072Z" fill="currentColor"/><path d="M25.9591 21.6487C27.0174 21.6487 27.8753 20.7908 27.8753 19.7326C27.8753 18.6743 27.0174 17.8164 25.9591 17.8164C24.9009 17.8164 24.043 18.6743 24.043 19.7326C24.043 20.7908 24.9009 21.6487 25.9591 21.6487Z" fill="currentColor"/></symbol>
|
||||
<symbol id="xpub" viewBox="0 0 32 32" fill="none"><path d="M21.3911 14.0298C20.4238 14.0396 19.4831 13.713 18.73 13.1059C17.9769 12.4988 17.4581 11.649 17.2622 10.7017C17.0664 9.75436 17.2057 8.76844 17.6564 7.91249C18.1071 7.05655 18.8412 6.38377 19.733 6.00919C20.6249 5.6346 21.6192 5.58148 22.5459 5.85891C23.4726 6.13634 24.2742 6.72709 24.8134 7.53015C25.3528 8.33319 25.5964 9.29866 25.5026 10.2614C25.4088 11.2242 24.9834 12.1246 24.2992 12.8084C23.5288 13.5829 22.4836 14.022 21.3911 14.0298ZM21.3911 7.5228C20.9277 7.52249 20.4746 7.65927 20.0888 7.91592C19.703 8.17258 19.4017 8.53764 19.223 8.96514C19.0442 9.39264 18.9959 9.86347 19.0842 10.3184C19.1724 10.7733 19.3933 11.1919 19.7189 11.5215C20.1653 11.9482 20.759 12.1863 21.3765 12.1863C21.9941 12.1863 22.5878 11.9482 23.0342 11.5215C23.359 11.1928 23.5796 10.7755 23.6683 10.3219C23.7571 9.86838 23.71 9.39874 23.5329 8.97182C23.356 8.54491 23.057 8.1797 22.6734 7.92194C22.2898 7.66419 21.8387 7.52534 21.3765 7.5228H21.3911Z" fill="currentColor"/><path d="M11.3293 29.9927C10.6744 29.9903 10.0472 29.7289 9.58436 29.2657L7.81038 27.4844L7.71586 27.608C7.18174 28.1431 6.45693 28.444 5.70089 28.4448C4.94485 28.4454 4.2195 28.1458 3.68441 27.6117C3.14933 27.0776 2.84834 26.3527 2.84766 25.5967C2.84698 24.8406 3.14666 24.1153 3.68078 23.5802L14.172 13.0672C13.4303 11.3826 13.301 9.49181 13.8065 7.722C14.312 5.9522 15.4204 4.41487 16.9399 3.37617C18.4594 2.33747 20.2942 1.8628 22.1268 2.03435C23.9594 2.20589 25.6743 3.01285 26.9746 4.31551C28.2749 5.61816 29.0787 7.3345 29.2469 9.16737C29.4152 11.0002 28.9372 12.8343 27.8957 14.3519C26.8543 15.8695 25.315 16.9751 23.5443 17.4774C21.7736 17.9797 19.883 17.847 18.1998 17.1023L15.0954 20.2067L16.3241 21.4354C16.5544 21.6639 16.7373 21.9357 16.8621 22.2352C16.9868 22.5346 17.0511 22.8559 17.0511 23.1803C17.0511 23.5048 16.9868 23.826 16.8621 24.1255C16.7373 24.425 16.5544 24.6968 16.3241 24.9252C15.8548 25.3728 15.2312 25.6225 14.5828 25.6225C13.9343 25.6225 13.3107 25.3728 12.8415 24.9252L11.6128 23.6893L11.2929 24.0092L13.0742 25.7904C13.4162 26.1364 13.6484 26.5757 13.742 27.0532C13.8354 27.5307 13.7859 28.0252 13.5996 28.4746C13.4132 28.9241 13.0984 29.3086 12.6946 29.5799C12.2908 29.8512 11.8158 29.9974 11.3293 30V29.9927ZM7.81038 25.296C7.92899 25.2954 8.04656 25.3182 8.15636 25.3631C8.26615 25.408 8.36599 25.4742 8.45017 25.5578L10.8712 27.9861C10.9961 28.1011 11.1596 28.1649 11.3293 28.1649C11.4989 28.1649 11.6624 28.1011 11.7873 27.9861C11.8474 27.9259 11.8949 27.8545 11.9274 27.7759C11.9598 27.6973 11.9764 27.613 11.9763 27.5281C11.9769 27.443 11.9604 27.3587 11.928 27.28C11.8955 27.2013 11.8477 27.1299 11.7873 27.07L9.36624 24.649C9.27688 24.5611 9.2068 24.4557 9.16049 24.3393C9.11417 24.2228 9.09263 24.098 9.09724 23.9728C9.09677 23.8536 9.12035 23.7354 9.16656 23.6255C9.21278 23.5156 9.2807 23.4161 9.36624 23.333L10.9948 21.7917C11.0792 21.707 11.1795 21.6399 11.2899 21.594C11.4003 21.5482 11.5187 21.5247 11.6383 21.5247C11.7578 21.5247 11.8762 21.5482 11.9865 21.594C12.0969 21.6399 12.1973 21.707 12.2817 21.7917L14.1575 23.6675C14.2802 23.7835 14.4428 23.8481 14.6119 23.8481C14.7808 23.8481 14.9434 23.7835 15.0663 23.6675C15.1276 23.6078 15.1766 23.5367 15.2102 23.4581C15.2439 23.3795 15.2618 23.2949 15.2626 23.2094C15.2605 23.0381 15.1929 22.8742 15.0735 22.7514L13.176 20.8465C13.0041 20.675 12.9073 20.4423 12.907 20.1995C12.9065 20.0802 12.93 19.9621 12.9763 19.8521C13.0225 19.7423 13.0904 19.6427 13.176 19.5597L17.3855 15.3501C17.5244 15.2094 17.7056 15.1183 17.9014 15.0906C18.0971 15.063 18.2965 15.1006 18.4688 15.1974C19.7515 15.9077 21.2475 16.131 22.6816 15.8261C24.1158 15.5214 25.3917 14.7091 26.2747 13.5387C27.1577 12.3681 27.5884 10.9182 27.4877 9.45553C27.3869 7.99281 26.7614 6.61566 25.7262 5.57732C24.691 4.539 23.3158 3.90933 21.8534 3.8041C20.391 3.69889 18.9398 4.1252 17.7666 5.00464C16.5935 5.88408 15.7773 7.15751 15.4681 8.59074C15.1591 10.024 15.3777 11.5206 16.0841 12.8055C16.1792 12.977 16.2157 13.1749 16.1881 13.369C16.1606 13.5632 16.0705 13.7432 15.9314 13.8815L4.96764 24.8307C4.8026 25.0286 4.71754 25.281 4.72917 25.5385C4.74081 25.796 4.84829 26.0397 5.0305 26.2219C5.21272 26.4041 5.4565 26.5117 5.71392 26.5233C5.97135 26.5349 6.22383 26.4499 6.42173 26.2848L7.14877 25.5578C7.32593 25.3863 7.56388 25.2922 7.81038 25.296Z" fill="currentColor"/></symbol>
|
||||
</svg>
|
||||
</svg>
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 22 KiB |
@ -39,7 +39,7 @@
|
||||
"Return to StoreName": "{{storeName}} xidmətinə qayıt",
|
||||
"This invoice has been paid": "Faktura ödənilmişdir",
|
||||
"This invoice has been archived": "Faktura arxivlənmişdir",
|
||||
"Archived_Body": "Lütfən sifariş haqqında məlumat və ya yardım almaq üçün mağaza ilə əlaqə saxlayın.",
|
||||
"Archived_Body": "Lütfən sifariş haqqında məlumat və ya yardım almaq üçün mağaza ilə əlaqə saxlayın",
|
||||
"BOLT 11 Invoice": "BOLT 11 Faktura",
|
||||
"Node Info": "Nod məlumatı",
|
||||
"txCount": "{{count}} tranzaksiya",
|
||||
|
@ -19,20 +19,20 @@
|
||||
"amount_paid": "المبلغ المدفوع",
|
||||
"amount_due": "المبلغ المستحق الدفع",
|
||||
"recommended_fee": "الرسوم الموصى بها",
|
||||
"fee_rate": "{{feeRate}} سات/بايت.",
|
||||
"fee_rate": "{{feeRate}} سات/بايت",
|
||||
"network_cost": "عمولة الشبكة",
|
||||
"tx_count": "{{count}} تحويلة",
|
||||
"qr_text": "امسح رمز الاستجابة السريعة أو انقر لنسخ العنوان.",
|
||||
"address": "العنوان",
|
||||
"lightning": "البرق.",
|
||||
"payment_link": "رابط الدفع.",
|
||||
"invoice_paid": "تم دفع الفاتورة.",
|
||||
"lightning": "البرق",
|
||||
"payment_link": "رابط الدفع",
|
||||
"invoice_paid": "تم دفع الفاتورة",
|
||||
"invoice_expired": "انتهت صلاحية الفاتورة",
|
||||
"invoice_expired_body": "صلاحية الفاتورة تنتهي بعد {{minutes}} دقائق فقط. الرجاء العودة إلى {{storeName}} إذا كنت ترغب في إعادة إرسال الدفعة.",
|
||||
"view_receipt": "عرض الإيصال",
|
||||
"return_to_store": "الرجوع الي {{storeName}}",
|
||||
"copy": "نسخ",
|
||||
"copy_confirm": "تم النسخ",
|
||||
"powered_by": "مدعوم بواسطة.",
|
||||
"powered_by": "مدعوم بواسطة",
|
||||
"conversion_body": "هذه الخدمة موفرة عن طريق طرف ثالث. يجب ان تضع في الإعتبار اننا غير مسؤلين عن كيف سيحول موفر الخدمة الأموال. الأموال ستكون ظاهر فقط في حين استلامها علي شبكة {{cryptoCode}}."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "az",
|
||||
"currentLanguage": "Azərbaycanca",
|
||||
"any_amount": "Hər hansı məbləğ.",
|
||||
"expiry_info": "Bu faktura son istifadə tarixindən sonra ləğv olunacaq.",
|
||||
"any_amount": "Hər hansı məbləğ",
|
||||
"expiry_info": "Bu faktura son istifadə tarixindən sonra ləğv olunacaq",
|
||||
"partial_payment_info": "Faktura tam ödənilməyib.",
|
||||
"still_due": "Zirə aşağıdakı ünvanə {{amount}} göndərin.",
|
||||
"view_details": "Ətraflı məlumat.",
|
||||
"view_details": "Ətraflı məlumat",
|
||||
"pay_with": "Ödənilir:",
|
||||
"pay_in_wallet": "Kartvəshtdən ödəniş etmək",
|
||||
"pay_by_nfc": "NFC vasitəsi ilə ödəmək (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "LNURL-Withdraw ilə ödəmək.",
|
||||
"pay_by_nfc": "NFC vasitəsi ilə ödəmək (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "LNURL-Withdraw ilə ödəmək",
|
||||
"invoice_id": "Faktura №",
|
||||
"order_id": "Sifariş №",
|
||||
"total_price": "Ümumi qiymət.",
|
||||
"total_fiat": "Ümumi fiat məbləği.",
|
||||
"exchange_rate": "Məzənnə.",
|
||||
"amount_paid": "Ödəniş edilən məbləğ.",
|
||||
"amount_due": "Ödəniş üçün lazım olan məbləğ.",
|
||||
"recommended_fee": "Tövsiyyə edilən haqq məbləği.",
|
||||
"fee_rate": "{{feeRate}} sat/bayt.",
|
||||
"total_price": "Ümumi qiymət",
|
||||
"total_fiat": "Ümumi fiat məbləği",
|
||||
"exchange_rate": "Məzənnə",
|
||||
"amount_paid": "Ödəniş edilən məbləğ",
|
||||
"amount_due": "Ödəniş üçün lazım olan məbləğ",
|
||||
"recommended_fee": "Tövsiyyə edilən haqq məbləği",
|
||||
"fee_rate": "{{feeRate}} sat/bayt",
|
||||
"network_cost": "Şəbəkə dəyəri",
|
||||
"tx_count": "{{count}} tranzaksiya",
|
||||
"qr_text": "QR kodunu skan edin, ya da ünvanı kopyalamaq üçün toxunun.",
|
||||
"address": "Ünvan",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Ödəniş keçidi.",
|
||||
"invoice_paid": "Faktura ödənilib.",
|
||||
"invoice_expired": "Faktura müddəti keçmişdir.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Ödəniş keçidi",
|
||||
"invoice_paid": "Faktura ödənilib",
|
||||
"invoice_expired": "Faktura müddəti keçmişdir",
|
||||
"invoice_expired_body": "Faktura yalnız {{minutes}} dəqiqə müddətində etibarlıdır. Ödənişi yenidən göndərmək istəyirsinizsə, {{storeName}}-yə qayıdın.",
|
||||
"view_receipt": "Qəbzə bax",
|
||||
"return_to_store": "{{storeName}} xidmətinə qayıt",
|
||||
"copy": "Kopyala",
|
||||
"copy_confirm": "Kopyalandı",
|
||||
"powered_by": "Tərəfindən təchiz edilmişdir.",
|
||||
"powered_by": "Tərəfindən təchiz edilmişdir",
|
||||
"conversion_body": "Bu xidmət üçüncü tərəf vasitəsilə göstərilir. Unutmayın ki, təchizatçının sizin vəsaiti hansı formada köçürdüyünə biz nəzarət etmirik. Faktura {{cryptoCode}} vəsaitinin blokçeyn tərəfindən qəbul edildiyi zaman ödənilmiş olaraq işarələnəcək. "
|
||||
}
|
@ -6,33 +6,33 @@
|
||||
"expiry_info": "Тази фактура ще изтече след",
|
||||
"partial_payment_info": "Фактурата не е платена изцяло.",
|
||||
"still_due": "Моля, изпратете {{amount}} на адреса по-долу.",
|
||||
"view_details": "Преглед на детайлите.",
|
||||
"view_details": "Преглед на детайлите",
|
||||
"pay_with": "Плати с",
|
||||
"pay_in_wallet": "Платете в портфейл.",
|
||||
"pay_by_nfc": "Платете с NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Платете с LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Платете в портфейл",
|
||||
"pay_by_nfc": "Платете с NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Платете с LNURL-Withdraw",
|
||||
"invoice_id": "Номер на фактура",
|
||||
"order_id": "Номер на поръчка",
|
||||
"total_price": "Обща цена.",
|
||||
"total_fiat": "Обща цена във валута.",
|
||||
"exchange_rate": "Валутен курс.",
|
||||
"amount_paid": "Платена сума.",
|
||||
"amount_due": "Дължима сума.",
|
||||
"recommended_fee": "Препоръчителна такса.",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"total_price": "Обща цена",
|
||||
"total_fiat": "Обща цена във валута",
|
||||
"exchange_rate": "Валутен курс",
|
||||
"amount_paid": "Платена сума",
|
||||
"amount_due": "Дължима сума",
|
||||
"recommended_fee": "Препоръчителна такса",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Тарифа на мрежата",
|
||||
"tx_count": "{{count}} транзакция",
|
||||
"qr_text": "Сканирайте QR кода или докоснете, за да копирате адреса.",
|
||||
"address": "Адрес",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Връзка за плащане.",
|
||||
"invoice_paid": "Фактурата е платена.",
|
||||
"invoice_expired": "Фактурата изтече.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Връзка за плащане",
|
||||
"invoice_paid": "Фактурата е платена",
|
||||
"invoice_expired": "Фактурата изтече",
|
||||
"invoice_expired_body": "Фактурата е валидна само за {{minutes}} минути. Върнете се в {{storeName}}, ако искате да изпратите отново плащането.",
|
||||
"view_receipt": "Преглед на касовата бележка.",
|
||||
"view_receipt": "Преглед на касовата бележка",
|
||||
"return_to_store": "Обратно до {{storeName}}",
|
||||
"copy": "Копирай",
|
||||
"copy_confirm": "Копирано",
|
||||
"powered_by": "Задвижвано от.",
|
||||
"powered_by": "Задвижвано от",
|
||||
"conversion_body": "Този сервиз за предлага от трето лице. Моля дръжте в предвид, че ние нямаме контрол как доставчикът препраща вашите средства. Фактурата ще бъде маркирана като платена само, когато средствата са получени на {{cryptoCode}} блок веригата."
|
||||
}
|
@ -6,30 +6,30 @@
|
||||
"expiry_info": "Ova faktura će isteći za",
|
||||
"partial_payment_info": "Faktura nije u potpunosti plaćena.",
|
||||
"still_due": "Molimo pošaljite {{amount}} na adresu ispod.",
|
||||
"view_details": "Pregled detalja.",
|
||||
"view_details": "Pregled detalja",
|
||||
"pay_with": "Plati sa",
|
||||
"pay_in_wallet": "Plati u novčaniku.",
|
||||
"pay_in_wallet": "Plati u novčaniku",
|
||||
"pay_by_nfc": "Plati putem NFC-a (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Plati putem LNURL-Withdraw.",
|
||||
"pay_by_lnurl": "Plati putem LNURL-Withdraw",
|
||||
"invoice_id": "Broj predračuna",
|
||||
"order_id": "Broj računa",
|
||||
"total_price": "Ukupna cijena.",
|
||||
"total_fiat": "Ukupno fiat.",
|
||||
"exchange_rate": "Tečaj.",
|
||||
"amount_paid": "Iznos plaćen.",
|
||||
"amount_due": "Iznos duga.",
|
||||
"total_price": "Ukupna cijena",
|
||||
"total_fiat": "Ukupno fiat",
|
||||
"exchange_rate": "Tečaj",
|
||||
"amount_paid": "Iznos plaćen",
|
||||
"amount_due": "Iznos duga",
|
||||
"recommended_fee": "Preporučena naknada",
|
||||
"fee_rate": "{{feeRate}} sat/bajt.",
|
||||
"fee_rate": "{{feeRate}} sat/bajt",
|
||||
"network_cost": "Cijena mreže",
|
||||
"tx_count": "{{count}} transakcija",
|
||||
"qr_text": "Skenirajte QR kod, ili dodirnite da kopirate adresu.",
|
||||
"address": "Adresa",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Link za plaćanje.",
|
||||
"invoice_paid": "Faktura plaćena.",
|
||||
"invoice_expired": "Račun je istekao.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Link za plaćanje",
|
||||
"invoice_paid": "Faktura plaćena",
|
||||
"invoice_expired": "Račun je istekao",
|
||||
"invoice_expired_body": "Faktura je važeća samo {{minutes}} minuta. Vratite se u {{storeName}} ako želite ponovo podnijeti plaćanje.",
|
||||
"view_receipt": "Pregledaj račun.",
|
||||
"view_receipt": "Pregledaj račun",
|
||||
"return_to_store": "Vrati na {{storeName}}",
|
||||
"copy": "Kopiraj",
|
||||
"copy_confirm": "Kopirano",
|
||||
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "ca-ES",
|
||||
"currentLanguage": "Català",
|
||||
"any_amount": "Qualsevol quantitat.",
|
||||
"expiry_info": "Aquesta factura caduca en.",
|
||||
"any_amount": "Qualsevol quantitat",
|
||||
"expiry_info": "Aquesta factura caduca en",
|
||||
"partial_payment_info": "La factura no s'ha pagat en la seva totalitat.",
|
||||
"still_due": "Si us plau, envieu {{amount}} a l'adreça següent.",
|
||||
"view_details": "Veure detalls.",
|
||||
"view_details": "Veure detalls",
|
||||
"pay_with": "Paga amb",
|
||||
"pay_in_wallet": "Pagar amb cartera.",
|
||||
"pay_by_nfc": "Pagar per NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Pagar per LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Pagar amb cartera",
|
||||
"pay_by_nfc": "Pagar per NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Pagar per LNURL-Withdraw",
|
||||
"invoice_id": "Núm. de factura",
|
||||
"order_id": "Núm. de Ordre",
|
||||
"total_price": "Preu total.",
|
||||
"total_fiat": "Total en Fiat.",
|
||||
"exchange_rate": "Tipus de canvi.",
|
||||
"amount_paid": "Quantitat pagada.",
|
||||
"amount_due": "Quantitat pendent.",
|
||||
"total_price": "Preu total",
|
||||
"total_fiat": "Total en Fiat",
|
||||
"exchange_rate": "Tipus de canvi",
|
||||
"amount_paid": "Quantitat pagada",
|
||||
"amount_due": "Quantitat pendent",
|
||||
"recommended_fee": "Comissió recomanada",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Cost de Xarxa",
|
||||
"tx_count": "{{count}} transaccions",
|
||||
"qr_text": "Escanegi el codi QR o toqui per copiar l'adreça.",
|
||||
"address": "Adreça",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Enllaç de pagament.",
|
||||
"invoice_paid": "Factura pagada.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Enllaç de pagament",
|
||||
"invoice_paid": "Factura pagada",
|
||||
"invoice_expired": "La factura ha caducat",
|
||||
"invoice_expired_body": "Una factura només és vàlida durant {{minutes}} minuts. Torni a {{storeName}} si vol tornar a enviar un pagament.",
|
||||
"view_receipt": "Veure rebut.",
|
||||
"view_receipt": "Veure rebut",
|
||||
"return_to_store": "Torna a {{storeName}}",
|
||||
"copy": "Copia",
|
||||
"copy_confirm": "Copiat",
|
||||
"powered_by": "Propulsat per.",
|
||||
"powered_by": "Propulsat per",
|
||||
"conversion_body": "Aquest servei el proveeix un tercer. Si us plau, teniu en ment que no tenim control sobre com reenviaran el proveidors els fons. Els rebuts seran marcats com a pagats una vegada els fons seran rebuts al Blockchain de {{cryptoCode}} ."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "cs-CZ",
|
||||
"currentLanguage": "Česky",
|
||||
"any_amount": "Jakékoliv množství.",
|
||||
"expiry_info": "Tato faktura vyprší za.",
|
||||
"any_amount": "Jakékoliv množství",
|
||||
"expiry_info": "Tato faktura vyprší za",
|
||||
"partial_payment_info": "Faktura nebyla zaplacena v plné výši.",
|
||||
"still_due": "Prosím zašlete {{amount}} na následující adresu.",
|
||||
"view_details": "Zobrazit podrobnosti.",
|
||||
"view_details": "Zobrazit podrobnosti",
|
||||
"pay_with": "Zaplatit pomocí",
|
||||
"pay_in_wallet": "Zaplatit v peněžence.",
|
||||
"pay_by_nfc": "Zaplatit pomocí NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Zaplatit pomocí LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Zaplatit v peněžence",
|
||||
"pay_by_nfc": "Zaplatit pomocí NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Zaplatit pomocí LNURL-Withdraw",
|
||||
"invoice_id": "ID Faktury",
|
||||
"order_id": "ID Objednávky",
|
||||
"total_price": "Celková cena.",
|
||||
"total_fiat": "Celková částka v Fiat měně.",
|
||||
"exchange_rate": "Směnný kurz.",
|
||||
"amount_paid": "Zaplacená částka.",
|
||||
"amount_due": "Částka splatná.",
|
||||
"total_price": "Celková cena",
|
||||
"total_fiat": "Celková částka v Fiat měně",
|
||||
"exchange_rate": "Směnný kurz",
|
||||
"amount_paid": "Zaplacená částka",
|
||||
"amount_due": "Částka splatná",
|
||||
"recommended_fee": "Doporučený poplatek",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Síťové náklady",
|
||||
"tx_count": "{{count}} transakce",
|
||||
"qr_text": "Naskenujte QR kód nebo klepněte pro zkopírování adresy.",
|
||||
"address": "Adresa",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Odkaz na platbu.",
|
||||
"invoice_paid": "Faktura zaplacena.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Odkaz na platbu",
|
||||
"invoice_paid": "Faktura zaplacena",
|
||||
"invoice_expired": "Faktura vypršela",
|
||||
"invoice_expired_body": "Faktura platí pouze {{minutes}} minut. Pokud chcete opětovně odeslat platbu, vraťte se do {{storeName}}.",
|
||||
"view_receipt": "Zobrazit účtenku",
|
||||
"return_to_store": "Vrátit se na {{storeName}}",
|
||||
"copy": "Kopírovat",
|
||||
"copy_confirm": "Zkopírováno",
|
||||
"powered_by": "Poháněno pomocí.",
|
||||
"powered_by": "Poháněno pomocí",
|
||||
"conversion_body": "Tato služba je poskytována třetí stranou. Prosíme mějte na paměti, že nemáme žádnou kontrolu nad tím, jak poskytovatelé budou nakládat s vašimi prostředky. Faktura bude označena jako zaplacena, pouze když jsou prostředky obdrženy v {{cryptoCode}} Blockchainu."
|
||||
}
|
@ -26,7 +26,7 @@
|
||||
"address": "Adresse",
|
||||
"lightning": "Lightning (navn på en specifik type blockchain-teknologi)",
|
||||
"payment_link": "Betalingslink",
|
||||
"invoice_paid": "Faktura betalt.",
|
||||
"invoice_paid": "Faktura betalt",
|
||||
"invoice_expired": "Faktura udløbet",
|
||||
"invoice_expired_body": "En faktura er kun gyldig i {{minutes}} minutter. Vend tilbage til {{storeName}}, hvis du ønsker at foretage en ny betaling.",
|
||||
"view_receipt": "Se kvittering",
|
||||
|
@ -28,11 +28,11 @@
|
||||
"payment_link": "Payment Link",
|
||||
"invoice_paid": "Invoice Paid",
|
||||
"invoice_expired": "Invoice Expired",
|
||||
"invoice_expired_body": "An invoice is only valid for {{minutes}} minutes.\n\nReturn to {{storeName}} if you like to resubmit a payment.",
|
||||
"invoice_expired_body": "An invoice is only valid for {{minutes}} minutes.\n\nReturn to {{storeName}} if you would like to resubmit a payment.",
|
||||
"view_receipt": "View receipt",
|
||||
"return_to_store": "Return to {{storeName}}",
|
||||
"copy": "Copy",
|
||||
"copy_confirm": "Copied",
|
||||
"powered_by": "Powered by",
|
||||
"conversion_body": "This service is provided by 3rd party. Please keep in mind that we have no control over how providers will forward your funds. Invoice will only be marked paid once funds are received on {{cryptoCode}} Blockchain."
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
"code": "fa",
|
||||
"currentLanguage": "فارسی",
|
||||
"any_amount": "هر مقداری",
|
||||
"expiry_info": "این فاکتور در زمان مشخص شده منقضی میشود.",
|
||||
"expiry_info": "این فاکتور در زمان مشخص شده منقضی میشود",
|
||||
"partial_payment_info": "این فاکتور به صورت کامل پرداخت نشده است.",
|
||||
"still_due": "لطفاً مقدار {{amount}} را به آدرس زیر ارسال کنید.",
|
||||
"view_details": "مشاهده جزئیات",
|
||||
@ -26,7 +26,7 @@
|
||||
"address": "آدرس",
|
||||
"lightning": "Lightning (برق)",
|
||||
"payment_link": "لینک پرداخت",
|
||||
"invoice_paid": "فاکتور پرداخت شده است.",
|
||||
"invoice_paid": "فاکتور پرداخت شده است",
|
||||
"invoice_expired": "فاکتور منقضی شده است",
|
||||
"invoice_expired_body": "یک فاکتور تنها برای {{minutes}} دقیقه معتبر است. در صورت تمایل به ارسال مجدد پرداخت، به {{storeName}} بازگردید.",
|
||||
"view_receipt": "مشاهده رسید",
|
||||
|
@ -21,13 +21,13 @@
|
||||
"recommended_fee": "Frais recommandés",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Coût réseau",
|
||||
"tx_count": "{{count}} transaction.",
|
||||
"tx_count": "{{count}} transaction",
|
||||
"qr_text": "Scannez le code QR ou appuyez pour copier l'adresse.",
|
||||
"address": "Adresse",
|
||||
"lightning": "Lightning.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Lien de paiement",
|
||||
"invoice_paid": "Facture payée",
|
||||
"invoice_expired": "Facture expirée.",
|
||||
"invoice_expired": "Facture expirée",
|
||||
"invoice_expired_body": "Une facture n'est valable que {{minutes}} minutes. Revenez à {{storeName}} si vous souhaitez soumettre un nouveau paiement.",
|
||||
"view_receipt": "Voir le reçu",
|
||||
"return_to_store": "Retourner sur {{storeName}}",
|
||||
|
@ -8,31 +8,31 @@
|
||||
"still_due": "Molimo pošaljite {{amount}} na adresu u nastavku.",
|
||||
"view_details": "Prikaži detalje",
|
||||
"pay_with": "Plati sa",
|
||||
"pay_in_wallet": "Plati u novčaniku.",
|
||||
"pay_by_nfc": "Plati putem NFC-a (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Plati putem LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Plati u novčaniku",
|
||||
"pay_by_nfc": "Plati putem NFC-a (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Plati putem LNURL-Withdraw",
|
||||
"invoice_id": "Broj računa",
|
||||
"order_id": "Broj narudžbe",
|
||||
"total_price": "Ukupna cijena.",
|
||||
"total_fiat": "Ukupno u fiat valuti.",
|
||||
"exchange_rate": "Tečajna stopa.",
|
||||
"amount_paid": "Plaćeni iznos.",
|
||||
"amount_due": "Iznos koji treba platiti.",
|
||||
"total_price": "Ukupna cijena",
|
||||
"total_fiat": "Ukupno u fiat valuti",
|
||||
"exchange_rate": "Tečajna stopa",
|
||||
"amount_paid": "Plaćeni iznos",
|
||||
"amount_due": "Iznos koji treba platiti",
|
||||
"recommended_fee": "Preporučena naknada",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Trošak mreže",
|
||||
"tx_count": "{{count}} transakcija.",
|
||||
"tx_count": "{{count}} transakcija",
|
||||
"qr_text": "Skenirajte QR kod ili dodirnite za kopiranje adrese.",
|
||||
"address": "Adresa",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Poveznica za plaćanje.",
|
||||
"invoice_paid": "Plaćena faktura.",
|
||||
"invoice_expired": "Račun je istekao.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Poveznica za plaćanje",
|
||||
"invoice_paid": "Plaćena faktura",
|
||||
"invoice_expired": "Račun je istekao",
|
||||
"invoice_expired_body": "Faktura vrijedi samo {{minutes}} minuta. Ako želite ponovo podnijeti plaćanje, vratite se na {{storeName}}.",
|
||||
"view_receipt": "Prikaži račun.",
|
||||
"view_receipt": "Prikaži račun",
|
||||
"return_to_store": "Vrati se na {{storeName}}",
|
||||
"copy": "Kopiraj",
|
||||
"copy_confirm": "Kopirano",
|
||||
"powered_by": "Pokreće ga (Powered by).",
|
||||
"powered_by": "Pokreće ga (Powered by)",
|
||||
"conversion_body": "Ovu usluga pruža treća strana. Vodite računa da nemamo kontroli nad načinom kako će Vam davatelji usluge proslijediti sredstva. Vodite računa da je račun plaćen tek kada su primljena sredstva na {{cryptoCode}} Blockchainu."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "id",
|
||||
"currentLanguage": "Bahasa Indonesia",
|
||||
"any_amount": "Jumlah berapa saja.",
|
||||
"expiry_info": "Tagihan ini akan kedaluwarsa dalam.",
|
||||
"any_amount": "Jumlah berapa saja",
|
||||
"expiry_info": "Tagihan ini akan kedaluwarsa dalam",
|
||||
"partial_payment_info": "Tagihan ini belum dibayar sepenuhnya.",
|
||||
"still_due": "Silakan kirim {{amount}} ke alamat di bawah ini.",
|
||||
"view_details": "Lihat Rincian.",
|
||||
"view_details": "Lihat Rincian",
|
||||
"pay_with": "Metode pembayaran",
|
||||
"pay_in_wallet": "Bayar dengan dompet.",
|
||||
"pay_by_nfc": "Bayar dengan NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Bayar dengan LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Bayar dengan dompet",
|
||||
"pay_by_nfc": "Bayar dengan NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Bayar dengan LNURL-Withdraw",
|
||||
"invoice_id": "Nomor tagihan",
|
||||
"order_id": "Nomor pesanan",
|
||||
"total_price": "Total Harga.",
|
||||
"total_fiat": "Total Fiat.",
|
||||
"exchange_rate": "Kurs.",
|
||||
"amount_paid": "Jumlah yang Dibayar.",
|
||||
"amount_due": "Jumlah yang Harus Dibayar.",
|
||||
"total_price": "Total Harga",
|
||||
"total_fiat": "Total Fiat",
|
||||
"exchange_rate": "Kurs",
|
||||
"amount_paid": "Jumlah yang Dibayar",
|
||||
"amount_due": "Jumlah yang Harus Dibayar",
|
||||
"recommended_fee": "Biaya yang Disarankan",
|
||||
"fee_rate": "{{feeRate}} sat/bita.",
|
||||
"fee_rate": "{{feeRate}} sat/bita",
|
||||
"network_cost": "Biaya jaringan",
|
||||
"tx_count": "{{count}} transaksi",
|
||||
"qr_text": "Pindai kode QR, atau ketuk untuk menyalin alamat.",
|
||||
"address": "Alamat",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Tautan Pembayaran.",
|
||||
"invoice_paid": "Tagihan Sudah Dibayar.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Tautan Pembayaran",
|
||||
"invoice_paid": "Tagihan Sudah Dibayar",
|
||||
"invoice_expired": "Tagihan Telah Kadaluarsa",
|
||||
"invoice_expired_body": "Sebuah tagihan hanya berlaku selama {{minutes}} menit. Kembali ke {{storeName}} jika Anda ingin mengirim ulang pembayaran.",
|
||||
"view_receipt": "Lihat tanda terima",
|
||||
"return_to_store": "Dikembalikan ke {{storeName}}",
|
||||
"copy": "Salinan",
|
||||
"copy_confirm": "Disalin",
|
||||
"powered_by": "Disediakan oleh.",
|
||||
"powered_by": "Disediakan oleh",
|
||||
"conversion_body": "Layanan ini disediakan oleh pihak ke-3. Harap diingat bahwa kami tidak memiliki kendali atas bagaimana penyedia layanan akan meneruskan dana Anda. Tagihan anda hanya akan ditandai dibayar setelah dana diterima di {{cryptoCode}} Blockchain."
|
||||
}
|
@ -19,14 +19,14 @@
|
||||
"amount_paid": "Greiðsla",
|
||||
"amount_due": "Upphæð sem á eftir stendur",
|
||||
"recommended_fee": "Mælt verðlag",
|
||||
"fee_rate": "{{feeRate}} sæti/bæti.",
|
||||
"fee_rate": "{{feeRate}} sæti/bæti",
|
||||
"network_cost": "Auka gjöld",
|
||||
"tx_count": "{{count}} reikningur",
|
||||
"qr_text": "Skannaðu QR kóðann eða smelltu til að afrita heimilisfangið.",
|
||||
"address": "Lykill",
|
||||
"lightning": "Ljóshetja",
|
||||
"payment_link": "Greiðslugjöf tengill",
|
||||
"invoice_paid": "Reikningur greiddur.",
|
||||
"invoice_paid": "Reikningur greiddur",
|
||||
"invoice_expired": "Reikningur rann út",
|
||||
"invoice_expired_body": "Reikningur er aðeins gildur í {{minutes}} mínútur. Skaltu snúa aftur til {{storeName}} ef þú vilt senda inn greiðslu aftur.",
|
||||
"view_receipt": "Skoða kvittun",
|
||||
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "it-IT",
|
||||
"currentLanguage": "Italiano",
|
||||
"any_amount": "Qualsiasi importo.",
|
||||
"expiry_info": "Questa fattura scadrà tra.",
|
||||
"any_amount": "Qualsiasi importo",
|
||||
"expiry_info": "Questa fattura scadrà tra",
|
||||
"partial_payment_info": "La fattura non è stata pagata per intero.",
|
||||
"still_due": "Si prega di inviare {{amount}} all'indirizzo sottostante.",
|
||||
"view_details": "Visualizza dettagli.",
|
||||
"view_details": "Visualizza dettagli",
|
||||
"pay_with": "Paga con",
|
||||
"pay_in_wallet": "Paga nel portafoglio.",
|
||||
"pay_by_nfc": "Paga tramite NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Paga tramite LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Paga nel portafoglio",
|
||||
"pay_by_nfc": "Paga tramite NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Paga tramite LNURL-Withdraw",
|
||||
"invoice_id": "Numero della Fattura",
|
||||
"order_id": "Numero dell'Ordine",
|
||||
"total_price": "Prezzo totale.",
|
||||
"total_fiat": "Totale Fiat.",
|
||||
"exchange_rate": "Tasso di cambio.",
|
||||
"amount_paid": "Importo pagato.",
|
||||
"amount_due": "Importo dovuto.",
|
||||
"total_price": "Prezzo totale",
|
||||
"total_fiat": "Totale Fiat",
|
||||
"exchange_rate": "Tasso di cambio",
|
||||
"amount_paid": "Importo pagato",
|
||||
"amount_due": "Importo dovuto",
|
||||
"recommended_fee": "Commissione consigliata",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Costi di Rete",
|
||||
"tx_count": "{{count}} transazione",
|
||||
"qr_text": "Scansiona il codice QR o tocca per copiare l'indirizzo.",
|
||||
"address": "Indirizzo",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Link di pagamento.",
|
||||
"invoice_paid": "Fattura pagata.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Link di pagamento",
|
||||
"invoice_paid": "Fattura pagata",
|
||||
"invoice_expired": "Fattura scaduta",
|
||||
"invoice_expired_body": "Una fattura è valida solo per {{minutes}} minuti. Torna su {{storeName}} se vuoi inviare nuovamente il pagamento.",
|
||||
"view_receipt": "Visualizza ricevuta.",
|
||||
"view_receipt": "Visualizza ricevuta",
|
||||
"return_to_store": "Ritorna a {{storeName}}",
|
||||
"copy": "Copia",
|
||||
"copy_confirm": "Copiato",
|
||||
"powered_by": "Fornito da.",
|
||||
"powered_by": "Fornito da",
|
||||
"conversion_body": "Questo servizio è fornito da 3° parti. Ricorda che non abbiamo alcun controllo su come tali parti inoltreranno i tuoi fondi. La fattura verrà contrassegnata come pagata solo dopo aver ricevuto i fondi sulla {{cryptoCode}} Blockchain."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "kk-KZ",
|
||||
"currentLanguage": "қазақ",
|
||||
"any_amount": "Кездейсоқ сомма.",
|
||||
"expiry_info": "Бұл инвойс мерзімі аяқталады.",
|
||||
"any_amount": "Кездейсоқ сомма",
|
||||
"expiry_info": "Бұл инвойс мерзімі аяқталады",
|
||||
"partial_payment_info": "Инвойс толық төлемен жасаған жоқ.",
|
||||
"still_due": "Төлем жасау үшін төмендегі мекенжайға {{amount}} жіберіңіз.",
|
||||
"view_details": "Мәліметтерді қарау.",
|
||||
"view_details": "Мәліметтерді қарау",
|
||||
"pay_with": "Төлеу",
|
||||
"pay_in_wallet": "Кошелектен төлеу.",
|
||||
"pay_by_nfc": "NFC (LNURL-Withdraw) арқылы төлеу.",
|
||||
"pay_by_lnurl": "LNURL-Withdraw арқылы төлеу.",
|
||||
"pay_in_wallet": "Кошелектен төлеу",
|
||||
"pay_by_nfc": "NFC (LNURL-Withdraw) арқылы төлеу",
|
||||
"pay_by_lnurl": "LNURL-Withdraw арқылы төлеу",
|
||||
"invoice_id": "Шот анықтамасы",
|
||||
"order_id": "Тапсырыс нөмірі",
|
||||
"total_price": "Жалпы баға.",
|
||||
"total_fiat": "Жалпы фиат.",
|
||||
"exchange_rate": "Алмашу курсі.",
|
||||
"amount_paid": "Төлем жасалған сомма.",
|
||||
"amount_due": "Төлемдік сомма.",
|
||||
"total_price": "Жалпы баға",
|
||||
"total_fiat": "Жалпы фиат",
|
||||
"exchange_rate": "Алмашу курсі",
|
||||
"amount_paid": "Төлем жасалған сомма",
|
||||
"amount_due": "Төлемдік сомма",
|
||||
"recommended_fee": "Ұсынылған ақы құны",
|
||||
"fee_rate": "{{feeRate}} сат/байт.",
|
||||
"fee_rate": "{{feeRate}} сат/байт",
|
||||
"network_cost": "Желі бағасы",
|
||||
"tx_count": "{{count}} Транзакция",
|
||||
"qr_text": "QR кодты сканерлау немесе мекенжайды көшіріп алу үшін басыңыз.",
|
||||
"address": "Мекенжай",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Төлем сілтемесі.",
|
||||
"invoice_paid": "Инвойс төленді.",
|
||||
"invoice_expired": "Төлем шегінің мерзімі өткен.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Төлем сілтемесі",
|
||||
"invoice_paid": "Инвойс төленді",
|
||||
"invoice_expired": "Төлем шегінің мерзімі өткен",
|
||||
"invoice_expired_body": "Инвойс тек {{minutes}} минут мерзімді. Төлеміңізді қайтару үшін {{storeName}} сайтына қайта келіңіз.",
|
||||
"view_receipt": "Квитанцияны қарау.",
|
||||
"view_receipt": "Квитанцияны қарау",
|
||||
"return_to_store": "{{storeName}} оралу",
|
||||
"copy": "Көшіру",
|
||||
"copy_confirm": "Көшірілді",
|
||||
"powered_by": "Құралдарымен қамтамасыз етілген.",
|
||||
"powered_by": "Құралдарымен қамтамасыз етілген",
|
||||
"conversion_body": "Бұл қызмет үшінші тараптан қамтамасыз етіледі. Сіздің ақшаңызды провайдерлер сізге қалай жеткізетінін біз бақылауға алмайтынымызды есте сақтауыңызды сұраймыз. Шот тек қана {{cryptoCode}} Blockchain жүйесі қаражаттырылған соң көрсетіледі."
|
||||
}
|
@ -2,8 +2,8 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "ko",
|
||||
"currentLanguage": "한국어",
|
||||
"any_amount": "아무 금액이나 가능합니다.",
|
||||
"expiry_info": "이 청구서는 만료됩니다.",
|
||||
"any_amount": "아무 금액이나 가능합니다",
|
||||
"expiry_info": "이 청구서는 만료됩니다",
|
||||
"partial_payment_info": "청구서가 완전히 지불되지 않았습니다.",
|
||||
"still_due": "아래 주소로 {{amount}}를 보내주십시오.",
|
||||
"view_details": "자세한 내용 보기",
|
||||
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "lv",
|
||||
"currentLanguage": "Latviešu",
|
||||
"any_amount": "Jebkura summa.",
|
||||
"expiry_info": "Šī rēķina derīguma termiņš ir.",
|
||||
"any_amount": "Jebkura summa",
|
||||
"expiry_info": "Šī rēķina derīguma termiņš ir",
|
||||
"partial_payment_info": "Rēķins nav pilnībā samaksāts.",
|
||||
"still_due": "Lūdzu nosūtiet {{amount}} uz zemāk norādīto adresi.",
|
||||
"view_details": "Skatīt detaļas.",
|
||||
"view_details": "Skatīt detaļas",
|
||||
"pay_with": "Maksāt ar",
|
||||
"pay_in_wallet": "Maksāt ar maku",
|
||||
"pay_by_nfc": "Maksāt ar NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Maksāt ar LNURL-Withdraw.",
|
||||
"pay_by_nfc": "Maksāt ar NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Maksāt ar LNURL-Withdraw",
|
||||
"invoice_id": "Rēķina ID",
|
||||
"order_id": "Pasūtījuma ID",
|
||||
"total_price": "Kopējā cena.",
|
||||
"total_fiat": "Kopējais fiat.",
|
||||
"exchange_rate": "Valūtas maiņas kurss.",
|
||||
"amount_paid": "Samaksātā summa.",
|
||||
"amount_due": "Jāsamaksā summa.",
|
||||
"total_price": "Kopējā cena",
|
||||
"total_fiat": "Kopējais fiat",
|
||||
"exchange_rate": "Valūtas maiņas kurss",
|
||||
"amount_paid": "Samaksātā summa",
|
||||
"amount_due": "Jāsamaksā summa",
|
||||
"recommended_fee": "Ieteicamā maksa",
|
||||
"fee_rate": "{{feeRate}} sat/baits.",
|
||||
"fee_rate": "{{feeRate}} sat/baits",
|
||||
"network_cost": "Tīkla komisija",
|
||||
"tx_count": "{{count}} transakcija",
|
||||
"qr_text": "Noslēgt QR kodu, vai pieskarieties, lai kopētu adresi.",
|
||||
"address": "Adrese",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Maksājumu saite.",
|
||||
"invoice_paid": "Rēķins samaksāts.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Maksājumu saite",
|
||||
"invoice_paid": "Rēķins samaksāts",
|
||||
"invoice_expired": "Rēķins ir nokavējis derīguma termiņu",
|
||||
"invoice_expired_body": "Rēķins ir derīgs tikai {{minutes}} minūtes. Atgriezieties pie {{storeName}}, ja vēlaties iesniegt maksājumu vēlreiz.",
|
||||
"view_receipt": "Apskatīt kvīti",
|
||||
"return_to_store": "Atgriezties {{storeName}}",
|
||||
"copy": "Kopēt",
|
||||
"copy_confirm": "Nokopēts",
|
||||
"powered_by": "Darbojas ar.",
|
||||
"powered_by": "Darbojas ar",
|
||||
"conversion_body": "Šo pakalpojumu nodrošina starpnieks. Ņemiet vērā, kā mēs nekādā veidā nekontrolējam maksājuma norisi. Rēķins tiks atzīmēts kā samaksāts tikai tad, kad līdzekļi būs saņemti {{cryptoCode}} blokķēdē."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "nl-NL",
|
||||
"currentLanguage": "Nederlands",
|
||||
"any_amount": "Elk bedrag.",
|
||||
"expiry_info": "Deze factuur verloopt binnen.",
|
||||
"any_amount": "Elk bedrag",
|
||||
"expiry_info": "Deze factuur verloopt binnen",
|
||||
"partial_payment_info": "De factuur is niet volledig betaald.",
|
||||
"still_due": "Stuur alstublieft {{amount}} naar het onderstaande adres.",
|
||||
"view_details": "Details bekijken.",
|
||||
"view_details": "Details bekijken",
|
||||
"pay_with": "Betaal met",
|
||||
"pay_in_wallet": "Betalen in portemonnee.",
|
||||
"pay_by_nfc": "Betalen via NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Betalen via LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Betalen in portemonnee",
|
||||
"pay_by_nfc": "Betalen via NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Betalen via LNURL-Withdraw",
|
||||
"invoice_id": "Factuurnummer",
|
||||
"order_id": "Ordernummer",
|
||||
"total_price": "Totaalprijs.",
|
||||
"total_fiat": "Totaalbedrag in fiat.",
|
||||
"exchange_rate": "Wisselkoers.",
|
||||
"amount_paid": "Betaald bedrag.",
|
||||
"amount_due": "Bedrag verschuldigd.",
|
||||
"recommended_fee": "Aanbevolen vergoeding.",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"total_price": "Totaalprijs",
|
||||
"total_fiat": "Totaalbedrag in fiat",
|
||||
"exchange_rate": "Wisselkoers",
|
||||
"amount_paid": "Betaald bedrag",
|
||||
"amount_due": "Bedrag verschuldigd",
|
||||
"recommended_fee": "Aanbevolen vergoeding",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Netwerkkosten",
|
||||
"tx_count": "{{count}} transactie",
|
||||
"qr_text": "Scan de QR-code of tik om het adres te kopiëren.",
|
||||
"address": "Adres",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Betalingslink.",
|
||||
"invoice_paid": "Factuur betaald.",
|
||||
"invoice_expired": "Factuur verlopen.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Betalingslink",
|
||||
"invoice_paid": "Factuur betaald",
|
||||
"invoice_expired": "Factuur verlopen",
|
||||
"invoice_expired_body": "Een factuur is slechts {{minutes}} minuten geldig. Keer terug naar {{storeName}} als u een betaling opnieuw wilt indienen.",
|
||||
"view_receipt": "Ontvangstbewijs bekijken.",
|
||||
"view_receipt": "Ontvangstbewijs bekijken",
|
||||
"return_to_store": "Terug naar {{storeName}}",
|
||||
"copy": "Kopiëren",
|
||||
"copy_confirm": "Gekopieerd",
|
||||
"powered_by": "Mogelijk gemaakt door.",
|
||||
"powered_by": "Mogelijk gemaakt door",
|
||||
"conversion_body": "Deze dienst wordt door een 3e partij geleverd. Wij hebben daardoor geen zicht op uw fondsen. De factuur wordt pas als betaald beschouwd, wanneer de fondsen door de {{ cryptoCode }} blockchain aanvaard zijn."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "no",
|
||||
"currentLanguage": "Norsk",
|
||||
"any_amount": "Enhver beløp.",
|
||||
"expiry_info": "Denne fakturaen vil utløpe om.",
|
||||
"any_amount": "Enhver beløp",
|
||||
"expiry_info": "Denne fakturaen vil utløpe om",
|
||||
"partial_payment_info": "Fakturaen er ikke betalt i sin helhet.",
|
||||
"still_due": "Vennligst send {{amount}} til adressen nedenfor.",
|
||||
"view_details": "Se detaljer.",
|
||||
"view_details": "Se detaljer",
|
||||
"pay_with": "Betal med",
|
||||
"pay_in_wallet": "Betal i lommebok.",
|
||||
"pay_by_nfc": "Betal med NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Betal med LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Betal i lommebok",
|
||||
"pay_by_nfc": "Betal med NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Betal med LNURL-Withdraw",
|
||||
"invoice_id": "Faktura ID",
|
||||
"order_id": "Ordre ID",
|
||||
"total_price": "Totalpris.",
|
||||
"total_fiat": "Totalt i fiat-valuta.",
|
||||
"exchange_rate": "Valutakurs.",
|
||||
"amount_paid": "Betalt beløp.",
|
||||
"amount_due": "Skyldig beløp.",
|
||||
"total_price": "Totalpris",
|
||||
"total_fiat": "Totalt i fiat-valuta",
|
||||
"exchange_rate": "Valutakurs",
|
||||
"amount_paid": "Betalt beløp",
|
||||
"amount_due": "Skyldig beløp",
|
||||
"recommended_fee": "Anbefalt gebyr",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Nettverksavgift",
|
||||
"tx_count": "{{count}} transaksjon",
|
||||
"qr_text": "Skan QR-koden, eller trykk for å kopiere adressen.",
|
||||
"address": "Adresse",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Betalingslenke.",
|
||||
"invoice_paid": "Faktura betalt.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Betalingslenke",
|
||||
"invoice_paid": "Faktura betalt",
|
||||
"invoice_expired": "Faktura utløpt",
|
||||
"invoice_expired_body": "En faktura er kun gyldig i {{minutes}} minutter. Gå tilbake til {{storeName}} hvis du vil sende inn en ny betaling.",
|
||||
"view_receipt": "Vis kvittering",
|
||||
"return_to_store": "Returner til {{storeName}}",
|
||||
"copy": "Kopier",
|
||||
"copy_confirm": "Kopiert",
|
||||
"powered_by": "Drevet av.",
|
||||
"powered_by": "Drevet av",
|
||||
"conversion_body": "Denne tjenesten håndteres av tredjepartstilbydere.\nHusk at vi har ingen kontroll over hvordan tilbyderene vil sende deg dine penger. Fakturaen blir ikke markert betalt før pengene har blitt mottatt på blokkkjeden til {{cryptoCode}}."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "pl",
|
||||
"currentLanguage": "Polski",
|
||||
"any_amount": "Dowolna kwota.",
|
||||
"expiry_info": "Ta faktura wygaśnie za.",
|
||||
"any_amount": "Dowolna kwota",
|
||||
"expiry_info": "Ta faktura wygaśnie za",
|
||||
"partial_payment_info": "Faktura nie została opłacona w pełnej wysokości.",
|
||||
"still_due": "Proszę przesłać {{amount}} na poniższy adres.",
|
||||
"view_details": "Zobacz szczegóły.",
|
||||
"still_due": "Proszę przesłać {{amount}}\nna poniższy adres.",
|
||||
"view_details": "Pokaż szczegóły",
|
||||
"pay_with": "Płać z",
|
||||
"pay_in_wallet": "Zapłać z portfela.",
|
||||
"pay_by_nfc": "Zapłać przez NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Zapłać przez LNURL-Withdraw.",
|
||||
"invoice_id": "Płatność ID",
|
||||
"order_id": "Zamówienie ID",
|
||||
"total_price": "Cena całkowita.",
|
||||
"total_fiat": "Całkowita kwota w walucie tradycyjnej.",
|
||||
"exchange_rate": "Kurs wymiany.",
|
||||
"amount_paid": "Zapłacona kwota.",
|
||||
"amount_due": "Kwota do zapłaty.",
|
||||
"invoice_id": "ID faktury",
|
||||
"order_id": "ID zamówienia",
|
||||
"total_price": "Cena całkowita",
|
||||
"total_fiat": "Całkowita kwota w walucie tradycyjnej",
|
||||
"exchange_rate": "Kurs wymiany",
|
||||
"amount_paid": "Zapłacona kwota",
|
||||
"amount_due": "Kwota do zapłaty",
|
||||
"recommended_fee": "Zalecana prowizja",
|
||||
"fee_rate": "{{feeRate}} sat/bajt.",
|
||||
"fee_rate": "{{feeRate}} sat/bajt",
|
||||
"network_cost": "Koszt sieci",
|
||||
"tx_count": "{{count}} transakcja",
|
||||
"qr_text": "Zeskanuj kod QR lub dotknij, aby skopiować adres.",
|
||||
"address": "Adres",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Link płatności.",
|
||||
"invoice_paid": "Faktura opłacona.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Link płatności",
|
||||
"invoice_paid": "Faktura opłacona",
|
||||
"invoice_expired": "Faktura wygasła",
|
||||
"invoice_expired_body": "Faktura jest ważna tylko przez {{minutes}} minut. Powróć do {{storeName}}, jeśli chcesz ponownie przesłać płatność.",
|
||||
"invoice_expired_body": "Faktura jest ważna tylko przez {{minutes}} minut.\n\nPowróć do {{storeName}}, jeśli chcesz ponownie przesłać płatność.",
|
||||
"view_receipt": "Pokaż rachunek",
|
||||
"return_to_store": "Wróć do {{storeName}}",
|
||||
"copy": "Kopia",
|
||||
"copy": "Kopiuj",
|
||||
"copy_confirm": "Skopiowano",
|
||||
"powered_by": "Napędzane przez.",
|
||||
"conversion_body": "Ten serwis prowadzony jest przez 3-cią stronę. Proszę pamiętać, że nie mamy kontroli nad tym jak dostawcy przekażą twoje fundusze. Płatność będzie uznana za opłaconą, tylko gdy otrzymane zostaną poprzez {{cryptoCode}}"
|
||||
"powered_by": "Napędzane przez",
|
||||
"conversion_body": "Ten serwis prowadzony jest przez trzecią stronę. Proszę pamiętać, że nie mamy kontroli nad tym jak dostawcy przekażą Twoje fundusze. Płatność będzie uznana za opłaconą, tylko gdy otrzymane zostaną na blockchainie {{cryptoCode}}."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "pt-PT",
|
||||
"currentLanguage": "Portuguese",
|
||||
"any_amount": "Qualquer montante.",
|
||||
"expiry_info": "Esta fatura expirará em.",
|
||||
"any_amount": "Qualquer montante",
|
||||
"expiry_info": "Esta fatura expirará em",
|
||||
"partial_payment_info": "A fatura não foi paga na íntegra.",
|
||||
"still_due": "Por favor, envie {{amount}} para o endereço abaixo.",
|
||||
"view_details": "Ver detalhes.",
|
||||
"view_details": "Ver detalhes",
|
||||
"pay_with": "Pague com",
|
||||
"pay_in_wallet": "Pagar na carteira.",
|
||||
"pay_by_nfc": "Pagar por NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Pagar por LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Pagar na carteira",
|
||||
"pay_by_nfc": "Pagar por NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Pagar por LNURL-Withdraw",
|
||||
"invoice_id": "Nº da Fatura",
|
||||
"order_id": "Nº da Encomenda",
|
||||
"total_price": "Preço total.",
|
||||
"total_fiat": "Total em moeda fiduciária.",
|
||||
"exchange_rate": "Taxa de câmbio.",
|
||||
"amount_paid": "Valor pago.",
|
||||
"amount_due": "Valor em dívida.",
|
||||
"total_price": "Preço total",
|
||||
"total_fiat": "Total em moeda fiduciária",
|
||||
"exchange_rate": "Taxa de câmbio",
|
||||
"amount_paid": "Valor pago",
|
||||
"amount_due": "Valor em dívida",
|
||||
"recommended_fee": "Taxa Recomendada",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Custo da Rede",
|
||||
"tx_count": "{{count}} transação",
|
||||
"qr_text": "Escanear o código QR ou tocar para copiar o endereço.",
|
||||
"address": "Endereço",
|
||||
"lightning": "Relâmpago.",
|
||||
"payment_link": "Link de pagamento.",
|
||||
"invoice_paid": "Fatura paga.",
|
||||
"lightning": "Relâmpago",
|
||||
"payment_link": "Link de pagamento",
|
||||
"invoice_paid": "Fatura paga",
|
||||
"invoice_expired": "Fatura Expirada",
|
||||
"invoice_expired_body": "Uma fatura é válida apenas por {{minutes}} minutos. Retorne à {{storeName}} se desejar reenviar o pagamento.",
|
||||
"view_receipt": "Ver recibo.",
|
||||
"view_receipt": "Ver recibo",
|
||||
"return_to_store": "Voltar para {{storeName}}",
|
||||
"copy": "Copiar",
|
||||
"copy_confirm": "Copiado",
|
||||
"powered_by": "Desenvolvido por.",
|
||||
"powered_by": "Desenvolvido por",
|
||||
"conversion_body": "Este serviço é oferecido por terceiros. Por favor tenha em mente que não temos qualquer controlo sobre como os seus fundos serão utilizados. A fatura será marcada como paga apenas quando os fundos forem recebidos na Blockchain {{cryptoCode}}."
|
||||
}
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "ro",
|
||||
"currentLanguage": "Română",
|
||||
"any_amount": "Orice sumă.",
|
||||
"expiry_info": "Această factură va expira în.",
|
||||
"any_amount": "Orice sumă",
|
||||
"expiry_info": "Această factură va expira în",
|
||||
"partial_payment_info": "Factura nu a fost plătită în întregime.",
|
||||
"still_due": "Vă rugăm să trimiteți {{amount}} la adresa de mai jos.",
|
||||
"view_details": "Vizualizați Detalii.",
|
||||
"view_details": "Vizualizați Detalii",
|
||||
"pay_with": "Platiți cu",
|
||||
"pay_in_wallet": "Plătiți în portofel.",
|
||||
"pay_by_nfc": "Plătiți prin NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Plătiți prin LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Plătiți în portofel",
|
||||
"pay_by_nfc": "Plătiți prin NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Plătiți prin LNURL-Withdraw",
|
||||
"invoice_id": "Factura cu ID",
|
||||
"order_id": "Comanda cu ID",
|
||||
"total_price": "Preț Total.",
|
||||
"total_fiat": "Total Fiat.",
|
||||
"exchange_rate": "Rata de Schimb.",
|
||||
"amount_paid": "Sumă Plătită.",
|
||||
"amount_due": "Sumă Datorată.",
|
||||
"recommended_fee": "Taxa recomandată.",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"total_price": "Preț Total",
|
||||
"total_fiat": "Total Fiat",
|
||||
"exchange_rate": "Rata de Schimb",
|
||||
"amount_paid": "Sumă Plătită",
|
||||
"amount_due": "Sumă Datorată",
|
||||
"recommended_fee": "Taxa recomandată",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Costuri de rețea",
|
||||
"tx_count": "{{count}} tranzacție",
|
||||
"qr_text": "Scanați codul QR sau atingeți pentru a copia adresa.",
|
||||
"address": "Adresa",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Link de Plată.",
|
||||
"invoice_paid": "Factura Plătită.",
|
||||
"invoice_expired": "Factura a expirat.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Link de Plată",
|
||||
"invoice_paid": "Factura Plătită",
|
||||
"invoice_expired": "Factura a expirat",
|
||||
"invoice_expired_body": "O factură este valabilă doar pentru {{minutes}} minute. Vă rugăm să reveniți la {{storeName}} dacă doriți să retrimiteți plata.",
|
||||
"view_receipt": "Vizualizați Chitanța.",
|
||||
"view_receipt": "Vizualizați Chitanța",
|
||||
"return_to_store": "Înapoi la {{storeName}}",
|
||||
"copy": "Copiere",
|
||||
"copy_confirm": "Copiat",
|
||||
"powered_by": "Powered by.",
|
||||
"powered_by": "Powered by",
|
||||
"conversion_body": "Acest serviciu este furnizat de o terță parte. Vă rugăm să rețineți că nu avem niciun control asupra modului în care furnizorii vor trimite fondurile mai departe. Factura va fi plătită numai după ce fondurile vor fi primite în {{cryptoCode}} Blockchain."
|
||||
}
|
@ -18,7 +18,7 @@
|
||||
"exchange_rate": "Обменный курс",
|
||||
"amount_paid": "Оплаченная сумма",
|
||||
"amount_due": "Сумма к оплате",
|
||||
"recommended_fee": "Рекомендуемая комиссия.",
|
||||
"recommended_fee": "Рекомендуемая комиссия",
|
||||
"fee_rate": "{{feeRate}} сат/байт",
|
||||
"network_cost": "Ценность сети",
|
||||
"tx_count": "{{count}} транзакция",
|
||||
@ -27,7 +27,7 @@
|
||||
"lightning": "Lightning (Лайтнинг)",
|
||||
"payment_link": "Ссылка на оплату",
|
||||
"invoice_paid": "Счет оплачен",
|
||||
"invoice_expired": "Истек срок действия счета.",
|
||||
"invoice_expired": "Истек срок действия счета",
|
||||
"invoice_expired_body": "Счет действителен только в течение {{minutes}} минут. Если вы хотите повторно оплатить, вернитесь в {{storeName}}.",
|
||||
"view_receipt": "Просмотреть квитанцию",
|
||||
"return_to_store": "Вернуться в {{storeName}}",
|
||||
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "sk-SK",
|
||||
"currentLanguage": "Slovenčina",
|
||||
"any_amount": "Akákoľvek suma.",
|
||||
"expiry_info": "Táto faktúra vyprší za.",
|
||||
"any_amount": "Akákoľvek suma",
|
||||
"expiry_info": "Táto faktúra vyprší za",
|
||||
"partial_payment_info": "Faktúra nebola zaplatená v plnej výške.",
|
||||
"still_due": "Prosím, pošlite {{amount}} na adresu nižšie.",
|
||||
"view_details": "Zobraziť podrobnosti.",
|
||||
"view_details": "Zobraziť podrobnosti",
|
||||
"pay_with": "Zaplatiť s",
|
||||
"pay_in_wallet": "Zaplatiť z peňaženky.",
|
||||
"pay_by_nfc": "Zaplatiť pomocou NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Zaplatiť pomocou LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Zaplatiť z peňaženky",
|
||||
"pay_by_nfc": "Zaplatiť pomocou NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Zaplatiť pomocou LNURL-Withdraw",
|
||||
"invoice_id": "ID faktúry",
|
||||
"order_id": "ID objednávky",
|
||||
"total_price": "Celková cena.",
|
||||
"total_fiat": "Celkové Fiat.",
|
||||
"exchange_rate": "Výmenný kurz.",
|
||||
"amount_paid": "Zaplatená suma.",
|
||||
"amount_due": "Suma na zaplatenie.",
|
||||
"recommended_fee": "Doporučený poplatek.",
|
||||
"fee_rate": "{{feeRate}} sat/bajt.",
|
||||
"total_price": "Celková cena",
|
||||
"total_fiat": "Celkové Fiat",
|
||||
"exchange_rate": "Výmenný kurz",
|
||||
"amount_paid": "Zaplatená suma",
|
||||
"amount_due": "Suma na zaplatenie",
|
||||
"recommended_fee": "Doporučený poplatek",
|
||||
"fee_rate": "{{feeRate}} sat/bajt",
|
||||
"network_cost": "Sieťové poplatky",
|
||||
"tx_count": "{{count}} transakcia",
|
||||
"qr_text": "Naskenujte QR kód alebo klepnite na skopírovanie adresy.",
|
||||
"address": "Adresa",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Odkaz na platbu.",
|
||||
"invoice_paid": "Faktúra zaplatená.",
|
||||
"invoice_expired": "Faktúra vypršala.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Odkaz na platbu",
|
||||
"invoice_paid": "Faktúra zaplatená",
|
||||
"invoice_expired": "Faktúra vypršala",
|
||||
"invoice_expired_body": "Faktúra platí iba {{minutes}} minút. Ak chcete opätovne odoslať platbu, vráťte sa do {{storeName}}.",
|
||||
"view_receipt": "Zobraziť účtenku.",
|
||||
"view_receipt": "Zobraziť účtenku",
|
||||
"return_to_store": "Vrátiť sa na {{storeName}}",
|
||||
"copy": "Skopírovať",
|
||||
"copy_confirm": "Skopírované",
|
||||
"powered_by": "Používa technológiu.",
|
||||
"powered_by": "Používa technológiu",
|
||||
"conversion_body": "Táto služba je poskytovaná treťou stranou. Majte na pamäti, že nemáme žiadnu kontrolu nad tým, ako budú poskytovatelia nakladať s Vašimi prostriedkami. Faktúra bude označená ako zaplatená až po prijatí prostriedkov v {{cryptoCode}} blockchaine."
|
||||
}
|
@ -6,33 +6,33 @@
|
||||
"expiry_info": "Ta račun bo potekel čez",
|
||||
"partial_payment_info": "Račun ni bil v celoti plačan.",
|
||||
"still_due": "Prosimo, pošljite {{amount}} na spodnji naslov.",
|
||||
"view_details": "Prikaži podrobnosti.",
|
||||
"view_details": "Prikaži podrobnosti",
|
||||
"pay_with": "Plačaj z",
|
||||
"pay_in_wallet": "Plačaj v denarnici.",
|
||||
"pay_by_nfc": "Plačajte z NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Plačajte z LNURL-Withdraw.",
|
||||
"invoice_id": "Račun št.",
|
||||
"order_id": "Naročilo št.",
|
||||
"total_price": "Skupna cena.",
|
||||
"total_fiat": "Skupni znesek v Fiat valuti.",
|
||||
"exchange_rate": "Tečaj.",
|
||||
"amount_paid": "Plačani znesek.",
|
||||
"amount_due": "Znesek, ki ga je potrebno plačati.",
|
||||
"recommended_fee": "Priporočena provizija.",
|
||||
"pay_in_wallet": "Plačaj v denarnici",
|
||||
"pay_by_nfc": "Plačajte z NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Plačajte z LNURL-Withdraw",
|
||||
"invoice_id": "Račun št",
|
||||
"order_id": "Naročilo št",
|
||||
"total_price": "Skupna cena",
|
||||
"total_fiat": "Skupni znesek v Fiat valuti",
|
||||
"exchange_rate": "Tečaj",
|
||||
"amount_paid": "Plačani znesek",
|
||||
"amount_due": "Znesek, ki ga je potrebno plačati",
|
||||
"recommended_fee": "Priporočena provizija",
|
||||
"fee_rate": "{{feeRate}} sat/bajt",
|
||||
"network_cost": "Strošek omrežja",
|
||||
"tx_count": "{{count}} transakcija",
|
||||
"qr_text": "Skenirajte QR kodo ali tapnite, da kopirate naslov.",
|
||||
"address": "Naslov",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Povezava za plačilo.",
|
||||
"invoice_paid": "Račun plačan.",
|
||||
"invoice_expired": "Račun potekel.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Povezava za plačilo",
|
||||
"invoice_paid": "Račun plačan",
|
||||
"invoice_expired": "Račun potekel",
|
||||
"invoice_expired_body": "Račun velja le {{minutes}} minut. Če želite ponovno poslati plačilo, se vrnite na {{storeName}}.",
|
||||
"view_receipt": "Prikaži račun",
|
||||
"return_to_store": "Vrni se na {{storeName}}",
|
||||
"copy": "Kopiraj",
|
||||
"copy_confirm": "Kopirano",
|
||||
"powered_by": "Omogoča.",
|
||||
"powered_by": "Omogoča",
|
||||
"conversion_body": "To storitev ponuja tretja oseba. Ne pozabite, da nimamo nadzora nad tem, kako bodo ponudniki posredovali vaša sredstva. Račun bo označen kot plačan šele po prejemu sredstev na {{cryptoCode}} Blockchain."
|
||||
}
|
@ -27,7 +27,7 @@
|
||||
"lightning": "Blixt",
|
||||
"payment_link": "Betalningslänk",
|
||||
"invoice_paid": "Fakturan betald",
|
||||
"invoice_expired": "Fakturan har löpt ut.",
|
||||
"invoice_expired": "Fakturan har löpt ut",
|
||||
"invoice_expired_body": "En faktura är endast giltig i {{minutes}} minuter. Återvänd till {{storeName}} om du vill skicka en ny betalning.",
|
||||
"view_receipt": "Visa kvitto",
|
||||
"return_to_store": "Återgå till {{storeName}}",
|
||||
|
@ -2,37 +2,37 @@
|
||||
"NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK https://chat.btcpayserver.org/ TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/",
|
||||
"code": "vi-VN",
|
||||
"currentLanguage": "Tiếng Việt",
|
||||
"any_amount": "Bất kỳ số tiền nào.",
|
||||
"expiry_info": "Hóa đơn này sẽ hết hạn trong.",
|
||||
"any_amount": "Bất kỳ số tiền nào",
|
||||
"expiry_info": "Hóa đơn này sẽ hết hạn trong",
|
||||
"partial_payment_info": "Hóa đơn chưa được thanh toán đầy đủ.",
|
||||
"still_due": "Vui lòng gửi {{amount}} đến địa chỉ bên dưới.",
|
||||
"view_details": "Xem chi tiết.",
|
||||
"view_details": "Xem chi tiết",
|
||||
"pay_with": "Thanh toán bằng",
|
||||
"pay_in_wallet": "Thanh toán trong ví.",
|
||||
"pay_by_nfc": "Thanh toán qua NFC (LNURL-Withdraw).",
|
||||
"pay_by_lnurl": "Thanh toán bằng LNURL-Withdraw.",
|
||||
"pay_in_wallet": "Thanh toán trong ví",
|
||||
"pay_by_nfc": "Thanh toán qua NFC (LNURL-Withdraw)",
|
||||
"pay_by_lnurl": "Thanh toán bằng LNURL-Withdraw",
|
||||
"invoice_id": "Số Hóa đơn",
|
||||
"order_id": "Số Đơn hàng",
|
||||
"total_price": "Tổng giá.",
|
||||
"total_fiat": "Tổng số Fiat.",
|
||||
"exchange_rate": "Tỷ giá hối đoái.",
|
||||
"amount_paid": "Số tiền đã thanh toán.",
|
||||
"amount_due": "Số tiền còn lại phải trả.",
|
||||
"total_price": "Tổng giá",
|
||||
"total_fiat": "Tổng số Fiat",
|
||||
"exchange_rate": "Tỷ giá hối đoái",
|
||||
"amount_paid": "Số tiền đã thanh toán",
|
||||
"amount_due": "Số tiền còn lại phải trả",
|
||||
"recommended_fee": "Phí khuyến nghị",
|
||||
"fee_rate": "{{feeRate}} sat/byte.",
|
||||
"fee_rate": "{{feeRate}} sat/byte",
|
||||
"network_cost": "Chi phí Mạng lưới",
|
||||
"tx_count": "{{count}} giao dịch",
|
||||
"qr_text": "Quét mã QR hoặc nhấn để sao chép địa chỉ.",
|
||||
"address": "Địa chỉ",
|
||||
"lightning": "Lightning.",
|
||||
"payment_link": "Liên kết thanh toán.",
|
||||
"invoice_paid": "Hóa đơn đã thanh toán.",
|
||||
"lightning": "Lightning",
|
||||
"payment_link": "Liên kết thanh toán",
|
||||
"invoice_paid": "Hóa đơn đã thanh toán",
|
||||
"invoice_expired": "Hóa đơn đã hết hạn",
|
||||
"invoice_expired_body": "Hóa đơn chỉ có hiệu lực trong {{minutes}} phút. Quý khách có thể quay lại {{storeName}} để gửi lại thanh toán.",
|
||||
"view_receipt": "Xem biên nhận.",
|
||||
"view_receipt": "Xem biên nhận",
|
||||
"return_to_store": "Quay lại {{storeName}}",
|
||||
"copy": "Sao chép",
|
||||
"copy_confirm": "Đã sao chép",
|
||||
"powered_by": "Được cung cấp bởi.",
|
||||
"powered_by": "Được cung cấp bởi",
|
||||
"conversion_body": "Dịch vụ này được cung cấp bởi một bên thứ ba. Xin vui lòng ghi nhớ, chúng tôi không kiểm soát phương thức các nhà cung cấp chuyển tiếp các nguồn tiền của bạn. Hóa đơn sẽ chỉ được đánh dấu đã thanh toán khi nào các nguồn tiền đã được nhận bởi Chuỗi khối Blockchain {{cryptoCode}}."
|
||||
}
|
@ -30,7 +30,7 @@
|
||||
"invoice_expired": "发票已过期",
|
||||
"invoice_expired_body": "发票仅在{{minutes}}分钟内有效。如需重新提交付款,请返回{{storeName}}。",
|
||||
"view_receipt": "查看收据",
|
||||
"return_to_store": "返回{{storeName}}。",
|
||||
"return_to_store": "返回{{storeName}}",
|
||||
"copy": "复制",
|
||||
"copy_confirm": "已复制",
|
||||
"powered_by": "由...提供技术支持",
|
||||
|
@ -27,7 +27,7 @@
|
||||
"lightning": "閃電網路 (Lightning Network)",
|
||||
"payment_link": "付款連結",
|
||||
"invoice_paid": "發票已支付",
|
||||
"invoice_expired": "發票已過期。",
|
||||
"invoice_expired": "發票已過期",
|
||||
"invoice_expired_body": "發票只有{{minutes}}分鐘的有效期限。如果您想重新提交付款,請返回{{storeName}}。",
|
||||
"view_receipt": "View Receipt",
|
||||
"return_to_store": "返回{{storeName}}",
|
||||
|
@ -39,7 +39,7 @@
|
||||
"Return to StoreName": "Επιστροφή στο {{storeName}}",
|
||||
"This invoice has been paid": "Αυτό το παραστατικό έχει πληρωθεί",
|
||||
"This invoice has been archived": "Αυτό το παραστατικό έχει αρχειοθετηθεί",
|
||||
"Archived_Body": "Παρακαλούμε επικοινωνήστε με το κατάστημα για πληροφορίες σχετικά με την παραγγελία ή εάν χρειάζεστε βοήθεια.",
|
||||
"Archived_Body": "Παρακαλούμε επικοινωνήστε με το κατάστημα για πληροφορίες σχετικά με την παραγγελία ή εάν χρειάζεστε βοήθεια",
|
||||
"BOLT 11 Invoice": "Παραστατικό BOLT 11",
|
||||
"Node Info": "Πληροφορίες Κόμβου",
|
||||
"txCount": "{{count}} συναλλαγή",
|
||||
|
@ -39,7 +39,7 @@
|
||||
"Return to StoreName": "Retourner sur {{storeName}}",
|
||||
"This invoice has been paid": "Cette facture a été payée",
|
||||
"This invoice has been archived": "Cette facture a été archivée",
|
||||
"Archived_Body": "Merci de contacter le marchand pour obtenir de l'aide ou des informations sur cette commande.",
|
||||
"Archived_Body": "Merci de contacter le marchand pour obtenir de l'aide ou des informations sur cette commande",
|
||||
"BOLT 11 Invoice": "Facture BOLT 11",
|
||||
"Node Info": "Informations sur le nœud",
|
||||
"txCount": "{{count}} transaction",
|
||||
|
@ -27,7 +27,7 @@
|
||||
"ConversionTab_CalculateAmount_Error": "Ponovi",
|
||||
"ConversionTab_LoadCurrencies_Error": "Ponovi",
|
||||
"ConversionTab_Lightning": "Ne postoji treća strana koja bi konvertirala Lightning Network uplate.",
|
||||
"ConversionTab_CurrencyList_Select_Option": "Odaberite valutu koju želite pretvoriti.",
|
||||
"ConversionTab_CurrencyList_Select_Option": "Odaberite valutu koju želite pretvoriti",
|
||||
"Invoice expiring soon...": "Račun uskoro ističe...",
|
||||
"Invoice expired": "Račun je istekao",
|
||||
"What happened?": "Što se dogodilo",
|
||||
@ -38,16 +38,16 @@
|
||||
"Order ID": "Broj narudžbe",
|
||||
"Return to StoreName": "Vrati se na {{storeName}}",
|
||||
"This invoice has been paid": "Račun je plaćen",
|
||||
"This invoice has been archived": "Račun je arhiviran.",
|
||||
"Archived_Body": "Kontaktirajte dućan za detalje oko narudžbe ili pomoć.",
|
||||
"This invoice has been archived": "Račun je arhiviran",
|
||||
"Archived_Body": "Kontaktirajte dućan za detalje oko narudžbe ili pomoć",
|
||||
"BOLT 11 Invoice": "BOLT 11 račun",
|
||||
"Node Info": "Informacije o čvoru.",
|
||||
"txCount": "{{count}} transakcija.",
|
||||
"txCount_plural": "{{count}} transakcije.",
|
||||
"Pay with CoinSwitch": "Platite putem CoinSwitch-a.",
|
||||
"Pay with Changelly": "Platite putem Changelly-ja.",
|
||||
"Close": "Zatvori.",
|
||||
"Node Info": "Informacije o čvoru",
|
||||
"txCount": "{{count}} transakcija",
|
||||
"txCount_plural": "{{count}} transakcije",
|
||||
"Pay with CoinSwitch": "Platite putem CoinSwitch-a",
|
||||
"Pay with Changelly": "Platite putem Changelly-ja",
|
||||
"Close": "Zatvori",
|
||||
"NotPaid_ExtraTransaction": "Račun nije u potpunosti plaćen. Molimo pošaljite novu transakciju kako bi pokrili iznos koji je preostao.",
|
||||
"Recommended_Fee": "Preporučena naknada: {{feeRate}} sat/bajt.",
|
||||
"View receipt": "Pregledajte račun."
|
||||
"Recommended_Fee": "Preporučena naknada: {{feeRate}} sat/bajt",
|
||||
"View receipt": "Pregledajte račun"
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user