@shoppexio/storefront-react 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/account.js +327 -27
- package/dist/account.js.map +1 -1
- package/dist/index.d.ts +30 -1
- package/eject/account/account-payment-method.ts +6 -1
- package/eject/account/account-subscriptions.ts +20 -4
- package/eject/account/messages/ar.json +17 -1
- package/eject/account/messages/de.json +17 -1
- package/eject/account/messages/en.json +17 -1
- package/eject/account/messages/es.json +17 -1
- package/eject/account/messages/fi.json +17 -1
- package/eject/account/messages/fr.json +17 -1
- package/eject/account/messages/hi.json +17 -1
- package/eject/account/messages/it.json +17 -1
- package/eject/account/messages/lt.json +17 -1
- package/eject/account/messages/nl.json +17 -1
- package/eject/account/messages/pl.json +17 -1
- package/eject/account/messages/pt.json +17 -1
- package/eject/account/messages/ru.json +17 -1
- package/eject/account/messages/tr.json +17 -1
- package/eject/account/messages/uk.json +17 -1
- package/eject/account/messages/zh.json +17 -1
- package/eject/account/subscriptions.tsx +56 -3
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -558,6 +558,35 @@ interface SdkCustomerSubscription {
|
|
|
558
558
|
} | null;
|
|
559
559
|
/** The Discord roles a pause takes ([] none); null when not known. Optional for deploy order. */
|
|
560
560
|
pause_access_roles?: string[] | null;
|
|
561
|
+
/** The running coupon term; null without one. Optional for deploy order. */
|
|
562
|
+
discount?: SdkCustomerSubscriptionDiscount | null;
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* `SubscriptionCouponTermView` on the dashboard wire: the code, what it takes off each payment,
|
|
566
|
+
* the payments it still discounts, and what the renewals cost. Every amount is the renewal-pricing
|
|
567
|
+
* function's, in `currency`.
|
|
568
|
+
*/
|
|
569
|
+
interface SdkCustomerSubscriptionDiscount {
|
|
570
|
+
code: string;
|
|
571
|
+
discount_type: 'PERCENTAGE' | 'FIXED';
|
|
572
|
+
/** The percent, or the fixed amount. */
|
|
573
|
+
discount_value: string;
|
|
574
|
+
/** The cap on one payment's discount; null without one. */
|
|
575
|
+
max_discount: string | null;
|
|
576
|
+
currency: string;
|
|
577
|
+
duration: 'ONCE' | 'REPEATING' | 'FOREVER';
|
|
578
|
+
/** ONCE: 1, REPEATING: N, FOREVER: null (every payment). */
|
|
579
|
+
payments_total: number | null;
|
|
580
|
+
/** Discounted payments completed; an open or voided renewal does not count. */
|
|
581
|
+
payments_used: number;
|
|
582
|
+
/** A discounted renewal. */
|
|
583
|
+
discounted_amount: string;
|
|
584
|
+
/** A renewal at the plan price, once the term ends. */
|
|
585
|
+
full_amount: string;
|
|
586
|
+
/** What each discounted renewal saves. */
|
|
587
|
+
discount_amount: string;
|
|
588
|
+
/** What the next renewal charges: `discounted_amount`, or `full_amount` once every discounted payment is issued. */
|
|
589
|
+
next_amount: string;
|
|
561
590
|
}
|
|
562
591
|
/** Why a buyer pauses (`SUBSCRIPTION_PAUSE_REASONS`). */
|
|
563
592
|
type SdkCustomerPauseReason = 'taking_a_break' | 'too_expensive' | 'not_using' | 'not_working' | 'other';
|
|
@@ -3705,4 +3734,4 @@ declare function useOnlineUserCount(): number | null;
|
|
|
3705
3734
|
*/
|
|
3706
3735
|
declare function resolveProductVideoEmbedSrc(value: unknown): string | null;
|
|
3707
3736
|
|
|
3708
|
-
export { ACCOUNT_ARTIFACT_CAPABILITIES, ACCOUNT_PATH, ACCOUNT_PATH_ALIAS, ACCOUNT_ROUTE_MESSAGE_KEYS, ACCOUNT_STOREFRONT_ROUTES, ACCOUNT_TABS, type AccountRouteMessageKey, type AccountRouteParts, type AccountTab, type AccountView, type BuyBoxVariantModel, CATALOG_PAGE_SIZE, CATALOG_SORTS, CATALOG_SORT_LABELS, type CartBoundsHeal, CartProvider, type CartQuoteLineBounds, type CartTotals, type CartView, type CartViewLine, type CatalogCardModel, type CatalogPage, type CatalogSort, type CheckoutFieldGroup, type CheckoutFieldValues, type CheckoutFields, type ContactFormValues, type ContactSubmissionContext, DEFAULT_ACCOUNT_TAB, DEFAULT_LOW_STOCK_THRESHOLD, DELIVERY_TIME_UNITS, type DeliveryPromise, type DeliveryTimeUnit, FAVORITES_CHANGED_EVENT, type FavoriteToggleResult, type FavoritesApi, FavoritesProvider, type FavoritesSnapshot, type FavoritesStatus, type FavoritesStore, type FavoritesTransport, type GroupCardModel, IMPLEMENTED_ACCOUNT_TABS, type ImplementedAccountTab, type LicenseStatement, type LicenseTerm, type LinePricing, MAX_PAY_WHAT_YOU_WANT_PRICE, type MenuNavLink, type MenuSlot, type NavLink, type NavigationLinks, PRODUCT_BADGE_ICON_NAMES, type PagedShopReviewsState, type ProductAddon, type ProductAutomaticDeal, type ProductBadge, type ProductBadgeIconName, type ProductBundle, type ProductBundleItem, type ProductCardModel, type ProductCategoryRef, type ProductContentTab, type ProductCustomField, type ProductDeliverable, type ProductDeliveryType, type ProductDetailModel, type ProductFaq, type ProductImage, type ProductImageKind, type ProductRatingModel, type ProductServiceStatus, type ProductSubscription, type ProductType, QUOTE_UNAVAILABLE_CHECKOUT_ERROR, type RatingStars, type ResellerProgramSummary, type RewardProgramItem, type RewardProgramSummary, SERVICE_STATES, SERVING_CONTEXT_HINT, SHOP_REVIEW_PAGE_SIZE, STOREFRONT_SORT_KEYS, type SdkCartAddOptions, type SdkCartAddon, type SdkCartAppliedDiscount, type SdkCartCodeSource, type SdkCartItem, type SdkCartQuote, type SdkCartQuoteLine, type SdkCheckoutResult, type SdkCustomerAffiliateLedgerStatus, type SdkCustomerAffiliateLink, type SdkCustomerAffiliateLinkCreated, type SdkCustomerAffiliateRates, type SdkCustomerAffiliateSummary, type SdkCustomerDashboard, type SdkCustomerDashboardOrder, type SdkCustomerDeliverable, type SdkCustomerDeliveryStatus, type SdkCustomerDeliverySummary, type SdkCustomerFileAccess, type SdkCustomerInvoicePdf, type SdkCustomerLicense, type SdkCustomerLoyalty, type SdkCustomerLoyaltyRedeem, type SdkCustomerLoyaltyTransactionType, type SdkCustomerNotificationPreferences, type SdkCustomerOpenRenewal, type SdkCustomerOrderDetail, type SdkCustomerOrderPage, type SdkCustomerOrderReview, type SdkCustomerOrderSummary, type SdkCustomerPause, type SdkCustomerPauseOptions, type SdkCustomerPauseReason, type SdkCustomerRewardActivity, type SdkCustomerRewards, type SdkCustomerSubscription, type SdkCustomerTicketSummary, type SdkCustomerWarranty, type SdkCustomerWarrantyClaim, type SdkCustomerWarrantyClaimStatus, type SdkCustomerWarrantyList, type SdkCustomerWarrantyStatus, type SdkEligibleCartDeal, type SdkInitOptions, type SdkMenu, type SdkMenuItem, type SdkPage, type SdkRecentSaleEntry, type SdkResponse, type SdkShopReview, type SdkShopReviewsSummary, type ServiceState, type ShopPageFaqItem, type ShopPageModel, type ShopPageState, type ShopReview, type ShopReviewLabels, type ShopReviewsPageResult, type ShopReviewsState, type ShoppexSdk, type SocialLink, type SocialNetwork, type StatusPageEntry, type StatusPageModel, type StockAlertRequest, type StockAlertResult, type StockChip, type StockTone, type StorefrontAddon, type StorefrontCatalog, type StorefrontCategory, type StorefrontData, type StorefrontGroup, type StorefrontListingItem, type StorefrontPaymentMethod, type StorefrontPaymentMethodKind, type StorefrontPriceVariant, type StorefrontProduct, StorefrontProvider, type StorefrontSettings, type StorefrontShop, type StorefrontShopStats, type StorefrontSortKey, type SubscriptionIntervalUnit, type SubscriptionTrial, type SupportChannel, type VolumeDiscountRule, type YouReceive, accountOrderHref, accountRouteMessage, accountTabHref, accountTabLabelKey, addonChoiceMissing, averageRating, badgesForCard, badgesForProductPage, buildCartTotals, buildCartView, buildCustomFieldPayload, buildInitialCheckoutFieldValues, buildProductDetail, buildStatusPageModel, buildStorefrontCatalog, calculateDisplayLineTotal, calculateLinePricing, canRequestStockAlert, canonicalAccountPath, checkoutFieldKey, checkoutFieldWriteRepriced, checkoutNeedsDetails, clampQuantity, clearRecoveredQuoteCheckoutError, createFavoritesStore, filterCatalogCards, findStorefrontProduct, firstOptionalString, flattenMerchantHtmlToText, formatCompactCount, formatDeliveryTime, formatLicenseTerm, formatMoney, formatSubscriptionCadence, formatSubscriptionTrial, getAuthoredContent, getBuyerCurrency, getProductGroups, getProducts, getShoppex, getStorefrontAddons, getStorefrontCategories, getStorefrontListing, getStorefrontSettings, getStorefrontShop, hasInjectedStorefrontData, isAccountTab, isBlankMerchantHtml, isCardSoldOut, isCheckboxValueChecked, isImplementedAccountTab, isProductSoldOut, isRecord, isSelectionSoldOut, loadLatestWrittenReviews, loadShopPage, loadShopReviewsPage, missingRequiredCheckoutValues, notifyFavoritesChanged, optionalBoolean, optionalString, optionalStringWithDefault, paginateCatalogCards, parseAccountPath, parseCartQuoteLines, parseEnum, parseFiniteNumber, parseProductBadges, parseServiceStatus, parseStorefrontSortKey, readCheckoutNeedsDetails, readStorefrontData, requestStockAlert, requireArray, requireBoolean, requireNumber, requireRecord, requireString, requireStringFromKeys, requireUnknownRecord, resolveAccountView, resolveBadgeForeground, resolveCartBoundsHeals, resolveCategorySelection, resolveCheckoutFields, resolveDeliveryPromise, resolveDisplayStock, resolveHideStockCounter, resolveLicenseTerm, resolveMenuLinksForSlot, resolvePayWhatYouWantMinimum, resolveProductVideoEmbedSrc, resolveQuantityBounds, resolveSupportChannels, resolveUnsellableLineIds, resolveVariantStock, resolveYouReceive, reviewsForProduct, roundCurrency, sanitizeMerchantHtml, sdkFavoritesTransport, sortCatalogCards, startCartMutation, stripMerchantHtmlImages, submitContactTicket, subscriptionForVariant, toShopReviews, toStarCount, useCart, useFavorites, useNavigationLinks, useOnlineUserCount, usePagedShopReviews, useShopReviews, useStorefront, validateCheckoutFieldValue, validateCheckoutFields, validateContactSubmission, withRequiredAddons };
|
|
3737
|
+
export { ACCOUNT_ARTIFACT_CAPABILITIES, ACCOUNT_PATH, ACCOUNT_PATH_ALIAS, ACCOUNT_ROUTE_MESSAGE_KEYS, ACCOUNT_STOREFRONT_ROUTES, ACCOUNT_TABS, type AccountRouteMessageKey, type AccountRouteParts, type AccountTab, type AccountView, type BuyBoxVariantModel, CATALOG_PAGE_SIZE, CATALOG_SORTS, CATALOG_SORT_LABELS, type CartBoundsHeal, CartProvider, type CartQuoteLineBounds, type CartTotals, type CartView, type CartViewLine, type CatalogCardModel, type CatalogPage, type CatalogSort, type CheckoutFieldGroup, type CheckoutFieldValues, type CheckoutFields, type ContactFormValues, type ContactSubmissionContext, DEFAULT_ACCOUNT_TAB, DEFAULT_LOW_STOCK_THRESHOLD, DELIVERY_TIME_UNITS, type DeliveryPromise, type DeliveryTimeUnit, FAVORITES_CHANGED_EVENT, type FavoriteToggleResult, type FavoritesApi, FavoritesProvider, type FavoritesSnapshot, type FavoritesStatus, type FavoritesStore, type FavoritesTransport, type GroupCardModel, IMPLEMENTED_ACCOUNT_TABS, type ImplementedAccountTab, type LicenseStatement, type LicenseTerm, type LinePricing, MAX_PAY_WHAT_YOU_WANT_PRICE, type MenuNavLink, type MenuSlot, type NavLink, type NavigationLinks, PRODUCT_BADGE_ICON_NAMES, type PagedShopReviewsState, type ProductAddon, type ProductAutomaticDeal, type ProductBadge, type ProductBadgeIconName, type ProductBundle, type ProductBundleItem, type ProductCardModel, type ProductCategoryRef, type ProductContentTab, type ProductCustomField, type ProductDeliverable, type ProductDeliveryType, type ProductDetailModel, type ProductFaq, type ProductImage, type ProductImageKind, type ProductRatingModel, type ProductServiceStatus, type ProductSubscription, type ProductType, QUOTE_UNAVAILABLE_CHECKOUT_ERROR, type RatingStars, type ResellerProgramSummary, type RewardProgramItem, type RewardProgramSummary, SERVICE_STATES, SERVING_CONTEXT_HINT, SHOP_REVIEW_PAGE_SIZE, STOREFRONT_SORT_KEYS, type SdkCartAddOptions, type SdkCartAddon, type SdkCartAppliedDiscount, type SdkCartCodeSource, type SdkCartItem, type SdkCartQuote, type SdkCartQuoteLine, type SdkCheckoutResult, type SdkCustomerAffiliateLedgerStatus, type SdkCustomerAffiliateLink, type SdkCustomerAffiliateLinkCreated, type SdkCustomerAffiliateRates, type SdkCustomerAffiliateSummary, type SdkCustomerDashboard, type SdkCustomerDashboardOrder, type SdkCustomerDeliverable, type SdkCustomerDeliveryStatus, type SdkCustomerDeliverySummary, type SdkCustomerFileAccess, type SdkCustomerInvoicePdf, type SdkCustomerLicense, type SdkCustomerLoyalty, type SdkCustomerLoyaltyRedeem, type SdkCustomerLoyaltyTransactionType, type SdkCustomerNotificationPreferences, type SdkCustomerOpenRenewal, type SdkCustomerOrderDetail, type SdkCustomerOrderPage, type SdkCustomerOrderReview, type SdkCustomerOrderSummary, type SdkCustomerPause, type SdkCustomerPauseOptions, type SdkCustomerPauseReason, type SdkCustomerRewardActivity, type SdkCustomerRewards, type SdkCustomerSubscription, type SdkCustomerSubscriptionDiscount, type SdkCustomerTicketSummary, type SdkCustomerWarranty, type SdkCustomerWarrantyClaim, type SdkCustomerWarrantyClaimStatus, type SdkCustomerWarrantyList, type SdkCustomerWarrantyStatus, type SdkEligibleCartDeal, type SdkInitOptions, type SdkMenu, type SdkMenuItem, type SdkPage, type SdkRecentSaleEntry, type SdkResponse, type SdkShopReview, type SdkShopReviewsSummary, type ServiceState, type ShopPageFaqItem, type ShopPageModel, type ShopPageState, type ShopReview, type ShopReviewLabels, type ShopReviewsPageResult, type ShopReviewsState, type ShoppexSdk, type SocialLink, type SocialNetwork, type StatusPageEntry, type StatusPageModel, type StockAlertRequest, type StockAlertResult, type StockChip, type StockTone, type StorefrontAddon, type StorefrontCatalog, type StorefrontCategory, type StorefrontData, type StorefrontGroup, type StorefrontListingItem, type StorefrontPaymentMethod, type StorefrontPaymentMethodKind, type StorefrontPriceVariant, type StorefrontProduct, StorefrontProvider, type StorefrontSettings, type StorefrontShop, type StorefrontShopStats, type StorefrontSortKey, type SubscriptionIntervalUnit, type SubscriptionTrial, type SupportChannel, type VolumeDiscountRule, type YouReceive, accountOrderHref, accountRouteMessage, accountTabHref, accountTabLabelKey, addonChoiceMissing, averageRating, badgesForCard, badgesForProductPage, buildCartTotals, buildCartView, buildCustomFieldPayload, buildInitialCheckoutFieldValues, buildProductDetail, buildStatusPageModel, buildStorefrontCatalog, calculateDisplayLineTotal, calculateLinePricing, canRequestStockAlert, canonicalAccountPath, checkoutFieldKey, checkoutFieldWriteRepriced, checkoutNeedsDetails, clampQuantity, clearRecoveredQuoteCheckoutError, createFavoritesStore, filterCatalogCards, findStorefrontProduct, firstOptionalString, flattenMerchantHtmlToText, formatCompactCount, formatDeliveryTime, formatLicenseTerm, formatMoney, formatSubscriptionCadence, formatSubscriptionTrial, getAuthoredContent, getBuyerCurrency, getProductGroups, getProducts, getShoppex, getStorefrontAddons, getStorefrontCategories, getStorefrontListing, getStorefrontSettings, getStorefrontShop, hasInjectedStorefrontData, isAccountTab, isBlankMerchantHtml, isCardSoldOut, isCheckboxValueChecked, isImplementedAccountTab, isProductSoldOut, isRecord, isSelectionSoldOut, loadLatestWrittenReviews, loadShopPage, loadShopReviewsPage, missingRequiredCheckoutValues, notifyFavoritesChanged, optionalBoolean, optionalString, optionalStringWithDefault, paginateCatalogCards, parseAccountPath, parseCartQuoteLines, parseEnum, parseFiniteNumber, parseProductBadges, parseServiceStatus, parseStorefrontSortKey, readCheckoutNeedsDetails, readStorefrontData, requestStockAlert, requireArray, requireBoolean, requireNumber, requireRecord, requireString, requireStringFromKeys, requireUnknownRecord, resolveAccountView, resolveBadgeForeground, resolveCartBoundsHeals, resolveCategorySelection, resolveCheckoutFields, resolveDeliveryPromise, resolveDisplayStock, resolveHideStockCounter, resolveLicenseTerm, resolveMenuLinksForSlot, resolvePayWhatYouWantMinimum, resolveProductVideoEmbedSrc, resolveQuantityBounds, resolveSupportChannels, resolveUnsellableLineIds, resolveVariantStock, resolveYouReceive, reviewsForProduct, roundCurrency, sanitizeMerchantHtml, sdkFavoritesTransport, sortCatalogCards, startCartMutation, stripMerchantHtmlImages, submitContactTicket, subscriptionForVariant, toShopReviews, toStarCount, useCart, useFavorites, useNavigationLinks, useOnlineUserCount, usePagedShopReviews, useShopReviews, useStorefront, validateCheckoutFieldValue, validateCheckoutFields, validateContactSubmission, withRequiredAddons };
|
|
@@ -95,6 +95,11 @@ export function paymentMethodLabel(payment: PaymentMethodSource): string {
|
|
|
95
95
|
if (payment.apmMethod) return payment.apmMethod;
|
|
96
96
|
// Crypto payments show the concrete coin; the rail stays internal.
|
|
97
97
|
if (payment.cryptoGateway) return cryptoCoinLabel(payment.cryptoGateway);
|
|
98
|
-
const base =
|
|
98
|
+
const base = gatewayLabel(payment.gateway);
|
|
99
99
|
return payment.blockchain ? `${base} (${payment.blockchain})` : base;
|
|
100
100
|
}
|
|
101
|
+
|
|
102
|
+
/** The rail in the words checkout shows it to the buyer (`PAYPAL_FF` → `PayPal F&F`). */
|
|
103
|
+
export function gatewayLabel(gateway: string): string {
|
|
104
|
+
return GATEWAY_LABELS[gateway] ?? gateway;
|
|
105
|
+
}
|
|
@@ -84,9 +84,11 @@ const KNOWN_INTERVALS: ReadonlySet<string> = new Set(['day', 'week', 'month', 'y
|
|
|
84
84
|
* it: "every 1 months" is wrong in English and worse in the languages that
|
|
85
85
|
* decline the noun. An interval the gateway spells in a way this catalog does
|
|
86
86
|
* not know keeps the raw word instead of being renamed into one that is close.
|
|
87
|
+
* `period` words the same interval after a price ("a month", "every 3 months").
|
|
87
88
|
*/
|
|
88
89
|
export function billingMessage(
|
|
89
90
|
plan: NonNullable<SdkCustomerSubscription['plan']>,
|
|
91
|
+
kind: 'billing' | 'period' = 'billing',
|
|
90
92
|
): { key: string; params: { count: number; interval: string } } {
|
|
91
93
|
const interval = plan.interval.trim().toLowerCase();
|
|
92
94
|
// A gateway that reports 0 or a negative count still bills once per interval.
|
|
@@ -94,12 +96,12 @@ export function billingMessage(
|
|
|
94
96
|
const params = { count, interval: plan.interval };
|
|
95
97
|
|
|
96
98
|
if (!KNOWN_INTERVALS.has(interval)) {
|
|
97
|
-
return { key:
|
|
99
|
+
return { key: `subscriptions.${kind}Other`, params };
|
|
98
100
|
}
|
|
99
101
|
|
|
100
102
|
const suffix = count === 1 ? 'One' : 'Other';
|
|
101
103
|
const name = interval.charAt(0).toUpperCase() + interval.slice(1);
|
|
102
|
-
return { key: `subscriptions
|
|
104
|
+
return { key: `subscriptions.${kind}${name}${suffix}`, params };
|
|
103
105
|
}
|
|
104
106
|
|
|
105
107
|
/**
|
|
@@ -124,6 +126,8 @@ export interface BillingHistoryInvoice {
|
|
|
124
126
|
kind: 'first_order' | 'renewal' | 'plan_change';
|
|
125
127
|
/** The plan change it paid for; null on a renewal or a first order. Days are null when the producer did not count them. */
|
|
126
128
|
plan_change: { from_plan_name: string; to_plan_name: string; days_left: number | null; days_total: number | null } | null;
|
|
129
|
+
/** The coupon term payment it billed (`BillingHistoryCouponPayment`): the code, its 1-based payment, and the payments it discounts (null: every one). Null when it billed none. */
|
|
130
|
+
coupon_payment: { code: string; payment: number; payments_total: number | null } | null;
|
|
127
131
|
}
|
|
128
132
|
|
|
129
133
|
const BILLING_KINDS: ReadonlyArray<BillingHistoryInvoice['kind']> = ['first_order', 'renewal', 'plan_change'];
|
|
@@ -145,6 +149,17 @@ function readPlanChange(value: unknown): BillingHistoryInvoice['plan_change'] |
|
|
|
145
149
|
return { from_plan_name: from, to_plan_name: to, days_left: daysLeft, days_total: daysTotal };
|
|
146
150
|
}
|
|
147
151
|
|
|
152
|
+
// The route sends the field on every row (required, nullable): only null means no coupon payment; absent or malformed fails the read.
|
|
153
|
+
function readCouponPayment(value: unknown): BillingHistoryInvoice['coupon_payment'] | undefined {
|
|
154
|
+
if (value === null) return null;
|
|
155
|
+
if (!isRecord(value)) return undefined;
|
|
156
|
+
const code = readString(value, 'code');
|
|
157
|
+
const payment = readCount(value, 'payment');
|
|
158
|
+
const paymentsTotal = readCount(value, 'payments_total');
|
|
159
|
+
if (code === null || payment === undefined || payment === null || paymentsTotal === undefined) return undefined;
|
|
160
|
+
return { code, payment, payments_total: paymentsTotal };
|
|
161
|
+
}
|
|
162
|
+
|
|
148
163
|
/** What a billing history row billed (Design Batch 9, C3), as a catalog key: "Renewal", "First order", "Plan change, Basic to Pro". */
|
|
149
164
|
export function billingEntryTitle(invoice: BillingHistoryInvoice): { key: string; params?: { from: string; to: string } } {
|
|
150
165
|
if (invoice.plan_change) {
|
|
@@ -197,11 +212,12 @@ export function narrowBillingHistory(payload: unknown): BillingHistoryResult {
|
|
|
197
212
|
// A kind this build does not know fails the read: a row that guesses what it billed could misname a charge.
|
|
198
213
|
const kind = BILLING_KINDS.find((known) => known === entry.kind);
|
|
199
214
|
const planChange = readPlanChange(entry.plan_change);
|
|
200
|
-
|
|
215
|
+
const couponPayment = readCouponPayment(entry.coupon_payment);
|
|
216
|
+
if (uniqid === null || total === null || currency === null || status === null || createdAt === null || !kind || planChange === undefined || couponPayment === undefined) {
|
|
201
217
|
return { ok: false };
|
|
202
218
|
}
|
|
203
219
|
|
|
204
|
-
invoices.push({ uniqid, total, currency, status, created_at: createdAt, kind, plan_change: planChange });
|
|
220
|
+
invoices.push({ uniqid, total, currency, status, created_at: createdAt, kind, plan_change: planChange, coupon_payment: couponPayment });
|
|
205
221
|
}
|
|
206
222
|
|
|
207
223
|
return { ok: true, invoices };
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "فوترة كل {count} × {interval}",
|
|
264
264
|
"gateway": "مزوّد الدفع",
|
|
265
265
|
"paymentMethod": "طريقة الدفع",
|
|
266
|
+
"discount": "الخصم",
|
|
267
|
+
"discountPercent": "{percent}%",
|
|
268
|
+
"discountCap": "، بحد أقصى {amount} لكل دفعة",
|
|
269
|
+
"discountEvery": "{code} · خصم {off} على كل دفعة{cap}",
|
|
270
|
+
"discountLeft": "{code} · خصم {off}{cap} · الدفعات المتبقية: {count}، ثم {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · خصم {off}{cap} · دفعة واحدة متبقية، ثم {price} {period}",
|
|
272
|
+
"periodDayOne": "يوميًا",
|
|
273
|
+
"periodDayOther": "كل {count} أيام",
|
|
274
|
+
"periodWeekOne": "أسبوعيًا",
|
|
275
|
+
"periodWeekOther": "كل {count} أسابيع",
|
|
276
|
+
"periodMonthOne": "شهريًا",
|
|
277
|
+
"periodMonthOther": "كل {count} أشهر",
|
|
278
|
+
"periodYearOne": "سنويًا",
|
|
279
|
+
"periodYearOther": "كل {count} سنوات",
|
|
280
|
+
"periodOther": "كل {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} المنتهية بالأرقام {last4}",
|
|
267
282
|
"noPaymentMethod": "لا توجد طريقة محفوظة",
|
|
268
283
|
"pause": "إيقاف مؤقت",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "الطلب الأول",
|
|
351
366
|
"historyRenewal": "تجديد",
|
|
352
367
|
"historyPlanChange": "تغيير الخطة، من {from} إلى {to}",
|
|
353
|
-
"historyDays": "عن {days} من {total} يومًا"
|
|
368
|
+
"historyDays": "عن {days} من {total} يومًا",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} من {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "جارٍ تحميل مفضلتك",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Abrechnung alle {count} × {interval}",
|
|
264
264
|
"gateway": "Zahlungsanbieter",
|
|
265
265
|
"paymentMethod": "Zahlungsmethode",
|
|
266
|
+
"discount": "Rabatt",
|
|
267
|
+
"discountPercent": "{percent} %",
|
|
268
|
+
"discountCap": ", höchstens {amount} pro Zahlung",
|
|
269
|
+
"discountEvery": "{code} · {off} Rabatt auf jede Zahlung{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} Rabatt{cap} · noch {count} Zahlungen, danach {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} Rabatt{cap} · noch 1 Zahlung, danach {price} {period}",
|
|
272
|
+
"periodDayOne": "pro Tag",
|
|
273
|
+
"periodDayOther": "alle {count} Tage",
|
|
274
|
+
"periodWeekOne": "pro Woche",
|
|
275
|
+
"periodWeekOther": "alle {count} Wochen",
|
|
276
|
+
"periodMonthOne": "pro Monat",
|
|
277
|
+
"periodMonthOther": "alle {count} Monate",
|
|
278
|
+
"periodYearOne": "pro Jahr",
|
|
279
|
+
"periodYearOther": "alle {count} Jahre",
|
|
280
|
+
"periodOther": "alle {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} endet auf {last4}",
|
|
267
282
|
"noPaymentMethod": "Keine hinterlegt",
|
|
268
283
|
"pause": "Pausieren",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Erstbestellung",
|
|
351
366
|
"historyRenewal": "Verlängerung",
|
|
352
367
|
"historyPlanChange": "Tarifwechsel, {from} zu {to}",
|
|
353
|
-
"historyDays": "für {days} von {total} Tagen"
|
|
368
|
+
"historyDays": "für {days} von {total} Tagen",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} von {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Deine Favoriten werden geladen",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Billed every {count} × {interval}",
|
|
264
264
|
"gateway": "Payment provider",
|
|
265
265
|
"paymentMethod": "Payment method",
|
|
266
|
+
"discount": "Discount",
|
|
267
|
+
"discountPercent": "{percent} %",
|
|
268
|
+
"discountCap": ", up to {amount} each",
|
|
269
|
+
"discountEvery": "{code} · {off} off every payment{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} off{cap} · {count} more payments, then {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} off{cap} · 1 more payment, then {price} {period}",
|
|
272
|
+
"periodDayOne": "a day",
|
|
273
|
+
"periodDayOther": "every {count} days",
|
|
274
|
+
"periodWeekOne": "a week",
|
|
275
|
+
"periodWeekOther": "every {count} weeks",
|
|
276
|
+
"periodMonthOne": "a month",
|
|
277
|
+
"periodMonthOther": "every {count} months",
|
|
278
|
+
"periodYearOne": "a year",
|
|
279
|
+
"periodYearOther": "every {count} years",
|
|
280
|
+
"periodOther": "every {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} ending {last4}",
|
|
267
282
|
"noPaymentMethod": "None on file",
|
|
268
283
|
"pause": "Pause",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "First order",
|
|
351
366
|
"historyRenewal": "Renewal",
|
|
352
367
|
"historyPlanChange": "Plan change, {from} to {to}",
|
|
353
|
-
"historyDays": "for {days} of {total} days"
|
|
368
|
+
"historyDays": "for {days} of {total} days",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} of {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Loading your favorites",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Se cobra cada {count} × {interval}",
|
|
264
264
|
"gateway": "Proveedor de pago",
|
|
265
265
|
"paymentMethod": "Método de pago",
|
|
266
|
+
"discount": "Descuento",
|
|
267
|
+
"discountPercent": "{percent} %",
|
|
268
|
+
"discountCap": ", hasta {amount} por pago",
|
|
269
|
+
"discountEvery": "{code} · {off} de descuento en cada pago{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} de descuento{cap} · {count} pagos más, después {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} de descuento{cap} · 1 pago más, después {price} {period}",
|
|
272
|
+
"periodDayOne": "al día",
|
|
273
|
+
"periodDayOther": "cada {count} días",
|
|
274
|
+
"periodWeekOne": "a la semana",
|
|
275
|
+
"periodWeekOther": "cada {count} semanas",
|
|
276
|
+
"periodMonthOne": "al mes",
|
|
277
|
+
"periodMonthOther": "cada {count} meses",
|
|
278
|
+
"periodYearOne": "al año",
|
|
279
|
+
"periodYearOther": "cada {count} años",
|
|
280
|
+
"periodOther": "cada {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} terminada en {last4}",
|
|
267
282
|
"noPaymentMethod": "Ninguno guardado",
|
|
268
283
|
"pause": "Pausar",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Primer pedido",
|
|
351
366
|
"historyRenewal": "Renovación",
|
|
352
367
|
"historyPlanChange": "Cambio de plan, de {from} a {to}",
|
|
353
|
-
"historyDays": "por {days} de {total} días"
|
|
368
|
+
"historyDays": "por {days} de {total} días",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} de {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Cargando tus favoritos",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Laskutetaan {count} × {interval} välein",
|
|
264
264
|
"gateway": "Maksupalvelu",
|
|
265
265
|
"paymentMethod": "Maksutapa",
|
|
266
|
+
"discount": "Alennus",
|
|
267
|
+
"discountPercent": "{percent} %",
|
|
268
|
+
"discountCap": ", enintään {amount} maksua kohden",
|
|
269
|
+
"discountEvery": "{code} · {off} alennus jokaisesta maksusta{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} alennus{cap} · vielä {count} maksua, sitten {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} alennus{cap} · vielä 1 maksu, sitten {price} {period}",
|
|
272
|
+
"periodDayOne": "päivässä",
|
|
273
|
+
"periodDayOther": "{count} päivän välein",
|
|
274
|
+
"periodWeekOne": "viikossa",
|
|
275
|
+
"periodWeekOther": "{count} viikon välein",
|
|
276
|
+
"periodMonthOne": "kuukaudessa",
|
|
277
|
+
"periodMonthOther": "{count} kuukauden välein",
|
|
278
|
+
"periodYearOne": "vuodessa",
|
|
279
|
+
"periodYearOther": "{count} vuoden välein",
|
|
280
|
+
"periodOther": "{count} {interval} välein",
|
|
266
281
|
"cardOnFile": "{brand}, päättyy numeroihin {last4}",
|
|
267
282
|
"noPaymentMethod": "Ei tallennettuna",
|
|
268
283
|
"pause": "Keskeytä",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Ensimmäinen tilaus",
|
|
351
366
|
"historyRenewal": "Uusinta",
|
|
352
367
|
"historyPlanChange": "Sopimuksen vaihto, {from} → {to}",
|
|
353
|
-
"historyDays": "{days}/{total} päivältä"
|
|
368
|
+
"historyDays": "{days}/{total} päivältä",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment}/{total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Ladataan suosikkejasi",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Facturé tous les {count} × {interval}",
|
|
264
264
|
"gateway": "Prestataire de paiement",
|
|
265
265
|
"paymentMethod": "Moyen de paiement",
|
|
266
|
+
"discount": "Réduction",
|
|
267
|
+
"discountPercent": "{percent} %",
|
|
268
|
+
"discountCap": ", jusqu’à {amount} par paiement",
|
|
269
|
+
"discountEvery": "{code} · {off} de réduction sur chaque paiement{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} de réduction{cap} · encore {count} paiements, puis {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} de réduction{cap} · encore 1 paiement, puis {price} {period}",
|
|
272
|
+
"periodDayOne": "par jour",
|
|
273
|
+
"periodDayOther": "tous les {count} jours",
|
|
274
|
+
"periodWeekOne": "par semaine",
|
|
275
|
+
"periodWeekOther": "toutes les {count} semaines",
|
|
276
|
+
"periodMonthOne": "par mois",
|
|
277
|
+
"periodMonthOther": "tous les {count} mois",
|
|
278
|
+
"periodYearOne": "par an",
|
|
279
|
+
"periodYearOther": "tous les {count} ans",
|
|
280
|
+
"periodOther": "tous les {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} finissant par {last4}",
|
|
267
282
|
"noPaymentMethod": "Aucun enregistré",
|
|
268
283
|
"pause": "Mettre en pause",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Première commande",
|
|
351
366
|
"historyRenewal": "Renouvellement",
|
|
352
367
|
"historyPlanChange": "Changement de formule, de {from} à {to}",
|
|
353
|
-
"historyDays": "pour {days} jours sur {total}"
|
|
368
|
+
"historyDays": "pour {days} jours sur {total}",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} sur {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Chargement de vos favoris",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "हर {count} × {interval} में बिलिंग",
|
|
264
264
|
"gateway": "भुगतान प्रदाता",
|
|
265
265
|
"paymentMethod": "भुगतान का तरीका",
|
|
266
|
+
"discount": "छूट",
|
|
267
|
+
"discountPercent": "{percent}%",
|
|
268
|
+
"discountCap": ", हर भुगतान पर अधिकतम {amount}",
|
|
269
|
+
"discountEvery": "{code} · हर भुगतान पर {off} की छूट{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} की छूट{cap} · {count} और भुगतान, फिर {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} की छूट{cap} · 1 और भुगतान, फिर {price} {period}",
|
|
272
|
+
"periodDayOne": "प्रति दिन",
|
|
273
|
+
"periodDayOther": "हर {count} दिन",
|
|
274
|
+
"periodWeekOne": "प्रति सप्ताह",
|
|
275
|
+
"periodWeekOther": "हर {count} सप्ताह",
|
|
276
|
+
"periodMonthOne": "प्रति माह",
|
|
277
|
+
"periodMonthOther": "हर {count} महीने",
|
|
278
|
+
"periodYearOne": "प्रति वर्ष",
|
|
279
|
+
"periodYearOther": "हर {count} साल",
|
|
280
|
+
"periodOther": "हर {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand}, अंतिम अंक {last4}",
|
|
267
282
|
"noPaymentMethod": "कोई सहेजा हुआ तरीका नहीं",
|
|
268
283
|
"pause": "रोकें",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "पहला ऑर्डर",
|
|
351
366
|
"historyRenewal": "नवीनीकरण",
|
|
352
367
|
"historyPlanChange": "योजना बदलाव, {from} से {to}",
|
|
353
|
-
"historyDays": "{total} में से {days} दिनों के लिए"
|
|
368
|
+
"historyDays": "{total} में से {days} दिनों के लिए",
|
|
369
|
+
"historyCouponPayment": "{code} · {total} में से {payment}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "आपके पसंदीदा लोड हो रहे हैं",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Addebito ogni {count} × {interval}",
|
|
264
264
|
"gateway": "Fornitore di pagamento",
|
|
265
265
|
"paymentMethod": "Metodo di pagamento",
|
|
266
|
+
"discount": "Sconto",
|
|
267
|
+
"discountPercent": "{percent}%",
|
|
268
|
+
"discountCap": ", fino a {amount} per pagamento",
|
|
269
|
+
"discountEvery": "{code} · {off} di sconto su ogni pagamento{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} di sconto{cap} · ancora {count} pagamenti, poi {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} di sconto{cap} · ancora 1 pagamento, poi {price} {period}",
|
|
272
|
+
"periodDayOne": "al giorno",
|
|
273
|
+
"periodDayOther": "ogni {count} giorni",
|
|
274
|
+
"periodWeekOne": "a settimana",
|
|
275
|
+
"periodWeekOther": "ogni {count} settimane",
|
|
276
|
+
"periodMonthOne": "al mese",
|
|
277
|
+
"periodMonthOther": "ogni {count} mesi",
|
|
278
|
+
"periodYearOne": "all’anno",
|
|
279
|
+
"periodYearOther": "ogni {count} anni",
|
|
280
|
+
"periodOther": "ogni {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} che termina con {last4}",
|
|
267
282
|
"noPaymentMethod": "Nessuno salvato",
|
|
268
283
|
"pause": "Metti in pausa",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Primo ordine",
|
|
351
366
|
"historyRenewal": "Rinnovo",
|
|
352
367
|
"historyPlanChange": "Cambio piano, da {from} a {to}",
|
|
353
|
-
"historyDays": "per {days} giorni su {total}"
|
|
368
|
+
"historyDays": "per {days} giorni su {total}",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} di {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Caricamento dei tuoi preferiti",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Apmokestinama kas {count} × {interval}",
|
|
264
264
|
"gateway": "Mokėjimų teikėjas",
|
|
265
265
|
"paymentMethod": "Mokėjimo būdas",
|
|
266
|
+
"discount": "Nuolaida",
|
|
267
|
+
"discountPercent": "{percent} %",
|
|
268
|
+
"discountCap": ", ne daugiau kaip {amount} už mokėjimą",
|
|
269
|
+
"discountEvery": "{code} · {off} nuolaida kiekvienam mokėjimui{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} nuolaida{cap} · liko mokėjimų: {count}, vėliau {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} nuolaida{cap} · liko 1 mokėjimas, vėliau {price} {period}",
|
|
272
|
+
"periodDayOne": "per dieną",
|
|
273
|
+
"periodDayOther": "kas {count} d.",
|
|
274
|
+
"periodWeekOne": "per savaitę",
|
|
275
|
+
"periodWeekOther": "kas {count} sav.",
|
|
276
|
+
"periodMonthOne": "per mėnesį",
|
|
277
|
+
"periodMonthOther": "kas {count} mėn.",
|
|
278
|
+
"periodYearOne": "per metus",
|
|
279
|
+
"periodYearOther": "kas {count} m.",
|
|
280
|
+
"periodOther": "kas {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand}, paskutiniai skaitmenys {last4}",
|
|
267
282
|
"noPaymentMethod": "Nėra išsaugoto",
|
|
268
283
|
"pause": "Pristabdyti",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Pirmas užsakymas",
|
|
351
366
|
"historyRenewal": "Atnaujinimas",
|
|
352
367
|
"historyPlanChange": "Plano keitimas, {from} → {to}",
|
|
353
|
-
"historyDays": "už {days} iš {total} d."
|
|
368
|
+
"historyDays": "už {days} iš {total} d.",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} iš {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Įkeliami jūsų mėgstami",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Elke {count} × {interval} gefactureerd",
|
|
264
264
|
"gateway": "Betaalprovider",
|
|
265
265
|
"paymentMethod": "Betaalmethode",
|
|
266
|
+
"discount": "Korting",
|
|
267
|
+
"discountPercent": "{percent}%",
|
|
268
|
+
"discountCap": ", maximaal {amount} per betaling",
|
|
269
|
+
"discountEvery": "{code} · {off} korting op elke betaling{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} korting{cap} · nog {count} betalingen, daarna {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} korting{cap} · nog 1 betaling, daarna {price} {period}",
|
|
272
|
+
"periodDayOne": "per dag",
|
|
273
|
+
"periodDayOther": "elke {count} dagen",
|
|
274
|
+
"periodWeekOne": "per week",
|
|
275
|
+
"periodWeekOther": "elke {count} weken",
|
|
276
|
+
"periodMonthOne": "per maand",
|
|
277
|
+
"periodMonthOther": "elke {count} maanden",
|
|
278
|
+
"periodYearOne": "per jaar",
|
|
279
|
+
"periodYearOther": "elke {count} jaar",
|
|
280
|
+
"periodOther": "elke {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} eindigend op {last4}",
|
|
267
282
|
"noPaymentMethod": "Niets vastgelegd",
|
|
268
283
|
"pause": "Pauzeren",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Eerste bestelling",
|
|
351
366
|
"historyRenewal": "Verlenging",
|
|
352
367
|
"historyPlanChange": "Pakketwijziging, van {from} naar {to}",
|
|
353
|
-
"historyDays": "voor {days} van {total} dagen"
|
|
368
|
+
"historyDays": "voor {days} van {total} dagen",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} van {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Je favorieten worden geladen",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Płatność co {count} × {interval}",
|
|
264
264
|
"gateway": "Dostawca płatności",
|
|
265
265
|
"paymentMethod": "Metoda płatności",
|
|
266
|
+
"discount": "Rabat",
|
|
267
|
+
"discountPercent": "{percent}%",
|
|
268
|
+
"discountCap": ", maksymalnie {amount} za płatność",
|
|
269
|
+
"discountEvery": "{code} · {off} rabatu na każdą płatność{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} rabatu{cap} · pozostałe płatności: {count}, potem {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} rabatu{cap} · jeszcze 1 płatność, potem {price} {period}",
|
|
272
|
+
"periodDayOne": "dziennie",
|
|
273
|
+
"periodDayOther": "co {count} dni",
|
|
274
|
+
"periodWeekOne": "tygodniowo",
|
|
275
|
+
"periodWeekOther": "co {count} tygodni",
|
|
276
|
+
"periodMonthOne": "miesięcznie",
|
|
277
|
+
"periodMonthOther": "co {count} miesięcy",
|
|
278
|
+
"periodYearOne": "rocznie",
|
|
279
|
+
"periodYearOther": "co {count} lat",
|
|
280
|
+
"periodOther": "co {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} kończąca się na {last4}",
|
|
267
282
|
"noPaymentMethod": "Brak zapisanej",
|
|
268
283
|
"pause": "Wstrzymaj",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Pierwsze zamówienie",
|
|
351
366
|
"historyRenewal": "Odnowienie",
|
|
352
367
|
"historyPlanChange": "Zmiana planu, z {from} na {to}",
|
|
353
|
-
"historyDays": "za {days} z {total} dni"
|
|
368
|
+
"historyDays": "za {days} z {total} dni",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} z {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Wczytujemy Twoje ulubione",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Cobrança a cada {count} × {interval}",
|
|
264
264
|
"gateway": "Fornecedor de pagamento",
|
|
265
265
|
"paymentMethod": "Método de pagamento",
|
|
266
|
+
"discount": "Desconto",
|
|
267
|
+
"discountPercent": "{percent}%",
|
|
268
|
+
"discountCap": ", até {amount} por pagamento",
|
|
269
|
+
"discountEvery": "{code} · {off} de desconto em cada pagamento{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} de desconto{cap} · mais {count} pagamentos, depois {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} de desconto{cap} · mais 1 pagamento, depois {price} {period}",
|
|
272
|
+
"periodDayOne": "por dia",
|
|
273
|
+
"periodDayOther": "a cada {count} dias",
|
|
274
|
+
"periodWeekOne": "por semana",
|
|
275
|
+
"periodWeekOther": "a cada {count} semanas",
|
|
276
|
+
"periodMonthOne": "por mês",
|
|
277
|
+
"periodMonthOther": "a cada {count} meses",
|
|
278
|
+
"periodYearOne": "por ano",
|
|
279
|
+
"periodYearOther": "a cada {count} anos",
|
|
280
|
+
"periodOther": "a cada {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand} terminado em {last4}",
|
|
267
282
|
"noPaymentMethod": "Nenhum guardado",
|
|
268
283
|
"pause": "Pausar",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Primeiro pedido",
|
|
351
366
|
"historyRenewal": "Renovação",
|
|
352
367
|
"historyPlanChange": "Mudança de plano, de {from} para {to}",
|
|
353
|
-
"historyDays": "por {days} de {total} dias"
|
|
368
|
+
"historyDays": "por {days} de {total} dias",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} de {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "A carregar os teus favoritos",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Списание раз в {count} × {interval}",
|
|
264
264
|
"gateway": "Платёжный провайдер",
|
|
265
265
|
"paymentMethod": "Способ оплаты",
|
|
266
|
+
"discount": "Скидка",
|
|
267
|
+
"discountPercent": "{percent}%",
|
|
268
|
+
"discountCap": ", не более {amount} за платёж",
|
|
269
|
+
"discountEvery": "{code} · скидка {off} на каждый платёж{cap}",
|
|
270
|
+
"discountLeft": "{code} · скидка {off}{cap} · осталось платежей: {count}, затем {price} {period}",
|
|
271
|
+
"discountLeftOne": "{code} · скидка {off}{cap} · остался 1 платёж, затем {price} {period}",
|
|
272
|
+
"periodDayOne": "в день",
|
|
273
|
+
"periodDayOther": "раз в {count} дн.",
|
|
274
|
+
"periodWeekOne": "в неделю",
|
|
275
|
+
"periodWeekOther": "раз в {count} нед.",
|
|
276
|
+
"periodMonthOne": "в месяц",
|
|
277
|
+
"periodMonthOther": "раз в {count} мес.",
|
|
278
|
+
"periodYearOne": "в год",
|
|
279
|
+
"periodYearOther": "раз в {count} г.",
|
|
280
|
+
"periodOther": "раз в {count} {interval}",
|
|
266
281
|
"cardOnFile": "{brand}, последние цифры {last4}",
|
|
267
282
|
"noPaymentMethod": "Не сохранён",
|
|
268
283
|
"pause": "Приостановить",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "Первый заказ",
|
|
351
366
|
"historyRenewal": "Продление",
|
|
352
367
|
"historyPlanChange": "Смена тарифа: {from} на {to}",
|
|
353
|
-
"historyDays": "за {days} из {total} дн."
|
|
368
|
+
"historyDays": "за {days} из {total} дн.",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment} из {total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Загружаем ваше избранное",
|
|
@@ -263,6 +263,21 @@
|
|
|
263
263
|
"billingOther": "Her {count} × {interval} faturalanır",
|
|
264
264
|
"gateway": "Ödeme sağlayıcısı",
|
|
265
265
|
"paymentMethod": "Ödeme yöntemi",
|
|
266
|
+
"discount": "İndirim",
|
|
267
|
+
"discountPercent": "%{percent}",
|
|
268
|
+
"discountCap": ", ödeme başına en fazla {amount}",
|
|
269
|
+
"discountEvery": "{code} · her ödemede {off} indirim{cap}",
|
|
270
|
+
"discountLeft": "{code} · {off} indirim{cap} · {count} ödeme daha, sonra {period} {price}",
|
|
271
|
+
"discountLeftOne": "{code} · {off} indirim{cap} · 1 ödeme daha, sonra {period} {price}",
|
|
272
|
+
"periodDayOne": "günlük",
|
|
273
|
+
"periodDayOther": "{count} günde bir",
|
|
274
|
+
"periodWeekOne": "haftalık",
|
|
275
|
+
"periodWeekOther": "{count} haftada bir",
|
|
276
|
+
"periodMonthOne": "aylık",
|
|
277
|
+
"periodMonthOther": "{count} ayda bir",
|
|
278
|
+
"periodYearOne": "yıllık",
|
|
279
|
+
"periodYearOther": "{count} yılda bir",
|
|
280
|
+
"periodOther": "{count} {interval} bir",
|
|
266
281
|
"cardOnFile": "{last4} ile biten {brand}",
|
|
267
282
|
"noPaymentMethod": "Kayıtlı yöntem yok",
|
|
268
283
|
"pause": "Duraklat",
|
|
@@ -350,7 +365,8 @@
|
|
|
350
365
|
"historyFirstOrder": "İlk sipariş",
|
|
351
366
|
"historyRenewal": "Yenileme",
|
|
352
367
|
"historyPlanChange": "Plan değişikliği, {from} → {to}",
|
|
353
|
-
"historyDays": "{total} günün {days} günü için"
|
|
368
|
+
"historyDays": "{total} günün {days} günü için",
|
|
369
|
+
"historyCouponPayment": "{code} · {payment}/{total}"
|
|
354
370
|
},
|
|
355
371
|
"favorites": {
|
|
356
372
|
"loading": "Favorileriniz yükleniyor",
|