orionplace-react 0.7.6 → 0.7.7

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.
Files changed (36) hide show
  1. package/README.md +1 -1
  2. package/package.json +2 -2
  3. package/templates/components/orionplace/legal/StorefrontPrivacy.README.md +2 -2
  4. package/templates/components/orionplace/search/MainSearch.tsx +2 -2
  5. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.tsx +1 -1
  6. package/templates/components/orionplace/shared/StorefrontPagination.tsx +1 -1
  7. package/templates/components/orionplace/storefront/StorefrontFooter.tsx +1 -1
  8. package/templates/lib/orionplace/accountLabels.ts +7 -0
  9. package/templates/lib/orionplace/activityLabels.ts +32 -1
  10. package/templates/lib/orionplace/blogLabels.ts +47 -1
  11. package/templates/lib/orionplace/browseLabels.ts +48 -1
  12. package/templates/lib/orionplace/cartLabels.ts +128 -1
  13. package/templates/lib/orionplace/cartPreview.ts +15 -0
  14. package/templates/lib/orionplace/categoryLabels.ts +9 -1
  15. package/templates/lib/orionplace/contactLabels.ts +51 -1
  16. package/templates/lib/orionplace/directoryLabels.ts +66 -1
  17. package/templates/lib/orionplace/errorPageLabels.ts +15 -0
  18. package/templates/lib/orionplace/featureLabels.ts +136 -1
  19. package/templates/lib/orionplace/featuredLabels.ts +10 -0
  20. package/templates/lib/orionplace/footerLabels.ts +17 -1
  21. package/templates/lib/orionplace/headerLabels.ts +30 -0
  22. package/templates/lib/orionplace/homeLabels.ts +22 -0
  23. package/templates/lib/orionplace/manufacturerIndex.ts +15 -0
  24. package/templates/lib/orionplace/orderLabels.ts +148 -1
  25. package/templates/lib/orionplace/privacyLabels.ts +77 -2
  26. package/templates/lib/orionplace/productActionLabels.ts +27 -0
  27. package/templates/lib/orionplace/productLabels.ts +37 -0
  28. package/templates/lib/orionplace/profileLabels.ts +75 -1
  29. package/templates/lib/orionplace/promoLabels.ts +37 -1
  30. package/templates/lib/orionplace/reviewLabels.ts +81 -1
  31. package/templates/lib/orionplace/sessionLabels.ts +12 -1
  32. package/templates/lib/orionplace/subscriptionLabels.ts +34 -1
  33. package/templates/lib/orionplace/subscriptionManageLabels.ts +118 -2
  34. package/templates/lib/orionplace/tariffLabels.ts +54 -3
  35. package/templates/lib/orionplace/tariffVariables.ts +38 -0
  36. package/templates/lib/orionplace/ticketLabels.ts +94 -1
@@ -266,6 +266,141 @@ const ru: typeof en = {
266
266
  },
267
267
  };
268
268
 
269
+ const es: typeof en = {
270
+ loading: 'Cargando…',
271
+ failed: 'No se ha podido completar la solicitud. Inténtalo de nuevo.',
272
+ retry: 'Reintentar',
273
+ refresh: 'Actualizar',
274
+ save: 'Guardar',
275
+ saved: 'Guardado',
276
+ cancel: 'Cancelar',
277
+ close: 'Cerrar',
278
+ delete: 'Eliminar',
279
+ edit: 'Editar',
280
+ add: 'Añadir',
281
+ back: 'Atrás',
282
+ next: 'Siguiente',
283
+ previous: 'Anterior',
284
+ page: 'Página',
285
+ empty: 'Todavía no hay nada aquí',
286
+ noMatches: 'Sin coincidencias',
287
+ account: 'Mi cuenta',
288
+ accountSignIn:
289
+ 'Inicia sesión para abrir tus pedidos, direcciones, monedero y las demás páginas de la cuenta.',
290
+ required: 'Obligatorio',
291
+ search: 'Buscar',
292
+ all: 'Todos',
293
+ continue: 'Continuar',
294
+ balance: 'Saldo',
295
+ navigation: {
296
+ profile: 'Perfil',
297
+ addresses: 'Direcciones',
298
+ orders: 'Pedidos',
299
+ tickets: 'Soporte',
300
+ wallet: 'Monedero',
301
+ subscriptions: 'Suscripciones',
302
+ wishlist: 'Favoritos',
303
+ promocodes: 'Mis códigos promocionales',
304
+ activity: 'Mi actividad',
305
+ },
306
+ logout: 'Cerrar sesión',
307
+ addresses: {
308
+ title: 'Mis direcciones',
309
+ description: 'Direcciones guardadas para la entrega.',
310
+ add: 'Añadir dirección',
311
+ edit: 'Editar dirección',
312
+ label: 'Nombre de la dirección',
313
+ country: 'País',
314
+ region: 'Región',
315
+ findRegion: 'Empieza a escribir una región',
316
+ city: 'Ciudad',
317
+ street: 'Calle',
318
+ house: 'Número',
319
+ postcode: 'Código postal',
320
+ line2: 'Línea de dirección adicional',
321
+ entrance: 'Portal',
322
+ intercom: 'Portero automático',
323
+ floor: 'Planta',
324
+ apartment: 'Piso',
325
+ details: 'Detalles adicionales',
326
+ default: 'Dirección de entrega predeterminada',
327
+ makeDefault: 'Predeterminada',
328
+ makeDefaultHint: 'Usar para la entrega por defecto',
329
+ clearDefault: 'Desmarcar',
330
+ clearDefaultHint: 'Quitar la selección predeterminada',
331
+ empty: 'Añade una dirección de entrega para empezar.',
332
+ chooseCountry: 'Elige un país',
333
+ locate: 'Localizar',
334
+ locationFailed: 'No se ha podido determinar la dirección. Introdúcela a mano.',
335
+ regionFailed: 'No se han podido cargar las regiones. Inténtalo de nuevo.',
336
+ hintsFailed:
337
+ 'Las sugerencias no están disponibles. Puedes seguir introduciendo la dirección a mano.',
338
+ deleteQuestion: '¿Eliminar esta dirección guardada?',
339
+ actions: 'Acciones de la dirección',
340
+ suggestionsLoading: 'Cargando sugerencias…',
341
+ savedTitle: 'Dirección guardada',
342
+ savedAsSent: 'Así se guarda la dirección en tu cuenta.',
343
+ savedRefined:
344
+ 'El servicio de direcciones ha precisado la dirección. Revisa los campos marcados y edítalos si hace falta.',
345
+ refined: 'precisado',
346
+ done: 'Listo',
347
+ defaultKept:
348
+ 'Esta es tu dirección de entrega predeterminada. Para quitar la marca, usa el menú de la dirección.',
349
+ noShipping: 'No hay envío a este país',
350
+ noShippingDefault:
351
+ 'No hay envío a este país, así que esta dirección no puede ser la predeterminada.',
352
+ },
353
+ wallet: {
354
+ title: 'Monedero y pagos',
355
+ description: 'Recarga tu saldo y sigue tu historial de pagos.',
356
+ topUp: 'Recargar saldo',
357
+ topUpAction: 'Depósito',
358
+ amount: 'Importe',
359
+ payment: 'Método de pago',
360
+ currency: 'Moneda',
361
+ create: 'Continuar',
362
+ history: 'Historial de pagos',
363
+ wallet: 'Monedero',
364
+ orders: 'Pedidos',
365
+ paid_subs: 'Suscripciones',
366
+ empty: 'Todavía no hay pagos en esta categoría.',
367
+ unavailable: 'No hay métodos de pago disponibles.',
368
+ pay: 'Pagar',
369
+ cancelInvoice: 'Cancelar',
370
+ cancelQuestion: '¿Cancelar esta factura sin pagar?',
371
+ refunds: 'Reembolsos',
372
+ refundToBalance: 'Devuelto al saldo',
373
+ refundToMethod: 'Devuelto al método de pago',
374
+ invoice: 'Factura',
375
+ paymentTitle: 'Pago',
376
+ check: 'Justificante',
377
+ transactionId: 'ID de transacción del pago',
378
+ comment: 'Comentario',
379
+ relatedOrder: 'Pedido',
380
+ relatedSubscription: 'Suscripción',
381
+ openOrder: 'Abrir el pedido',
382
+ openSubscription: 'Abrir mis suscripciones',
383
+ purpose: {
384
+ topUp: 'Recarga de saldo',
385
+ deduction: 'Descontado del saldo',
386
+ orderPayment: 'Pago de pedido',
387
+ subscriptionPayment: 'Pago de suscripción',
388
+ bonus: 'Abonado en el saldo',
389
+ refund: 'Reembolso',
390
+ },
391
+ // Invoice states by their number: the backend sends the state name
392
+ // in English only.
393
+ statuses: {
394
+ '-4': 'Cancelado',
395
+ '-3': 'Caducado',
396
+ '-2': 'Bloqueado',
397
+ '-1': 'Fallido',
398
+ '0': 'Creado',
399
+ '1': 'Completado',
400
+ } as Record<string, string>,
401
+ },
402
+ };
403
+
269
404
  export function featureLabels(locale: string) {
270
- return locale.toLowerCase().startsWith('ru') ? ru : en;
405
+ return locale.toLowerCase().startsWith('ru') ? ru : locale.toLowerCase().startsWith('es') ? es : en;
271
406
  }
@@ -21,6 +21,16 @@ const labels = {
21
21
  'Рекомендации подбираются по категориям, которые вы искали.',
22
22
  home: 'Главная',
23
23
  },
24
+ es: {
25
+ title: 'Destacados',
26
+ description: 'Productos de las categorías que has buscado.',
27
+ empty:
28
+ 'Busca productos: las recomendaciones salen de las categorías que buscas.',
29
+ guestTitle: 'Inicia sesión para ver recomendaciones',
30
+ guestDescription:
31
+ 'Las recomendaciones se eligen entre las categorías que has buscado.',
32
+ home: 'Inicio',
33
+ },
24
34
  };
25
35
 
26
36
  export function featuredLabels(locale: string) {
@@ -17,7 +17,23 @@ export function footerLabels(locale: string) {
17
17
  new: 'Новинки',
18
18
  featured: 'Рекомендуем',
19
19
  }
20
- : {
20
+ : locale.toLowerCase().startsWith('es') ? {
21
+ catalog: 'Catálogo',
22
+ sellers: 'Vendedores',
23
+ stores: 'Tiendas',
24
+ manufacturers: 'Fabricantes',
25
+ sections: 'Descubre',
26
+ contact: 'Contacto',
27
+ privacy: 'Política de privacidad',
28
+ home: 'Inicio',
29
+ profile: 'Mi cuenta',
30
+ journal: 'Blog',
31
+ rights: 'Todos los derechos reservados.',
32
+ products: 'Productos',
33
+ discounts: 'Descuentos',
34
+ new: 'Novedades',
35
+ featured: 'Destacados',
36
+ } : {
21
37
  catalog: 'Catalog',
22
38
  sellers: 'Sellers',
23
39
  stores: 'Stores',
@@ -61,6 +61,36 @@ const labels = {
61
61
  wishlistSelection: 'Запрошено избранное',
62
62
  cartSelection: 'Запрошена корзина',
63
63
  },
64
+ es: {
65
+ home: 'Inicio del marketplace',
66
+ language: 'Idioma',
67
+ currency: 'Moneda',
68
+ search: 'Buscar en el marketplace',
69
+ find: 'Buscar',
70
+ catalog: 'Catálogo',
71
+ manufacturers: 'Fabricantes',
72
+ journal: 'Blog',
73
+ close: 'Cerrar el catálogo',
74
+ back: 'Atrás',
75
+ viewCategory: 'Ver',
76
+ highlights: 'Categorías destacadas',
77
+ empty: 'No hay categorías disponibles',
78
+ emptyProducts: 'No hay productos representativos',
79
+ saved: 'Favoritos',
80
+ cart: 'Carrito',
81
+ variantLoading: 'Cargando la variante seleccionada…',
82
+ variantFailed: 'No se ha podido cargar esta variante. Vuelve a seleccionarla para reintentar.',
83
+ searchSelection: 'Búsqueda solicitada',
84
+ categorySelection: 'Categoría seleccionada',
85
+ productSelection: 'Producto seleccionado',
86
+ sellerSelection: 'Vendedor seleccionado',
87
+ signInSelection: 'Inicio de sesión solicitado',
88
+ signOutSelection: 'Cierre de sesión solicitado',
89
+ profileSelection: 'Perfil solicitado',
90
+ walletSelection: 'Monedero solicitado',
91
+ wishlistSelection: 'Favoritos solicitados',
92
+ cartSelection: 'Carrito solicitado',
93
+ },
64
94
  };
65
95
 
66
96
  export function headerLabels(locale: string) {
@@ -45,6 +45,28 @@ const labels = {
45
45
  eventSelected: 'Выбрано событие',
46
46
  bannerSelected: 'Выбран баннер',
47
47
  },
48
+ es: {
49
+ categories: 'Comprar por categoría',
50
+ products: 'Productos',
51
+ discounts: 'Descuentos',
52
+ new: 'Novedades',
53
+ newFailed: 'No se han podido cargar las novedades.',
54
+ featured: 'Hallazgos destacados',
55
+ events: 'Eventos y ofertas',
56
+ banner: 'Lo mejor de la tienda',
57
+ previous: 'Diapositiva anterior',
58
+ previousProducts: 'Productos anteriores',
59
+ nextProducts: 'Productos siguientes',
60
+ next: 'Diapositiva siguiente',
61
+ viewAll: 'Más',
62
+ loading: 'Cargando la tienda…',
63
+ failed: 'No se ha podido cargar la tienda.',
64
+ retry: 'Reintentar',
65
+ category: 'Categoría',
66
+ event: 'Evento',
67
+ eventSelected: 'Evento seleccionado',
68
+ bannerSelected: 'Banner seleccionado',
69
+ },
48
70
  };
49
71
 
50
72
  export function homeLabels(locale: string) {
@@ -76,6 +76,21 @@ export function manufacturerIndexLabels(locale: string) {
76
76
  };
77
77
  }
78
78
 
79
+ if (locale.toLowerCase().startsWith('es')) {
80
+ return {
81
+ title: 'Fabricantes',
82
+ total: 'Total de fabricantes',
83
+ alphabet: 'Alfabeto de fabricantes',
84
+ logos: 'Logotipos de fabricantes',
85
+ load: 'Cargar',
86
+ loading: 'Cargando fabricantes…',
87
+ empty: 'No se han encontrado fabricantes',
88
+ emptyAlphabet: 'No hay fabricantes en este alfabeto',
89
+ retry: 'Reintentar',
90
+ allOn: 'Todos los que empiezan por',
91
+ all: 'Todos',
92
+ };
93
+ }
79
94
  return {
80
95
  title: 'Manufacturers',
81
96
  total: 'Total manufacturers',
@@ -284,6 +284,150 @@ const ru: typeof en = {
284
284
  },
285
285
  };
286
286
 
287
+ const es: typeof en = {
288
+ title: 'Mis pedidos',
289
+ allOrders: 'Todos los pedidos',
290
+ order: 'Pedido',
291
+ placed: 'Realizado',
292
+ empty: 'No hay pedidos en este grupo',
293
+ emptyHint: 'Revisa las otras pestañas o explora el catálogo.',
294
+ catalog: 'Ir al catálogo',
295
+ loading: 'Cargando pedidos',
296
+ tabs: 'Grupos de pedidos',
297
+ active: 'Activos',
298
+ canceled: 'Cancelado',
299
+ finished: 'Completado',
300
+ refund: 'Devoluciones',
301
+ details: 'Detalles',
302
+ status: 'Estado',
303
+ statusOrder: 'Estado del pedido',
304
+ statusPayment: 'Estado del pago',
305
+ items: 'Artículos',
306
+ delivery: 'Envío',
307
+ payment: 'Pago',
308
+ summary: 'Resumen',
309
+ actions: 'Acciones',
310
+ total: 'Total',
311
+ paid: 'Pagado',
312
+ left: 'Importe pendiente',
313
+ subtotal: 'Artículos',
314
+ discount: 'Descuento',
315
+ promo: 'Código promocional',
316
+ deliveryDiscount: 'Descuento en el envío',
317
+ shippingCost: 'Envío',
318
+ refunded: 'Reembolsado',
319
+ calculating: 'Calculando',
320
+ pay: 'Pagar',
321
+ payHint: 'Pagar o cambiar el método de pago',
322
+ method: 'Método',
323
+ paymentMethod: 'Método de pago',
324
+ choosePayment: 'Elige un método de pago',
325
+ unavailable: 'No hay métodos de pago disponibles.',
326
+ paymentTime: 'Tiempo para pagar',
327
+ minutes: 'min',
328
+ cancel: 'Cancelar',
329
+ cancelHint: 'Cancelar el pedido',
330
+ cancelQuestion: '¿Cancelar este pedido?',
331
+ repeat: 'Repetir pedido',
332
+ repeatHint: 'Repetir pedido: añadir al carrito los artículos de este pedido',
333
+ repeatQuestion:
334
+ '¿Sustituir el carrito actual por los artículos disponibles de este pedido?',
335
+ repeated: 'Los artículos se han añadido a tu carrito.',
336
+ openCart: 'Abrir el carrito',
337
+ shipment: 'Envío parcial',
338
+ of: 'de',
339
+ shipments: 'Envíos',
340
+ recipient: 'Destinatario',
341
+ contact: 'Contacto',
342
+ phone: 'Teléfono',
343
+ email: 'Correo electrónico',
344
+ carrier: 'Transportista',
345
+ apartment: 'piso',
346
+ address: 'Dirección',
347
+ pickupPoint: 'Punto de recogida',
348
+ shipsFrom: 'Se envía desde',
349
+ digitalDelivery: 'Entrega digital',
350
+ estimate: 'Previsto',
351
+ sentDate: 'Enviado',
352
+ deliveredDate: 'Entregado',
353
+ returnedByCarrierDate: 'Devuelto por el transportista',
354
+ tracking: 'Número de seguimiento',
355
+ trackingStatus: 'Estado del transportista',
356
+ quantity: 'Cantidad',
357
+ price: 'Precio',
358
+ lineTotal: 'Total de la línea',
359
+ options: 'Opciones del artículo',
360
+ optionsTotal: 'Opciones',
361
+ itemTotal: 'Total del artículo',
362
+ download: 'Descargar',
363
+ digital: 'Contenido comprado',
364
+ digitalReturned: 'Devuelto',
365
+ attachment: 'Tu archivo adjunto',
366
+ support: 'Solicitar la devolución de este artículo',
367
+ supportOption: 'Solicitar la devolución de esta opción',
368
+ supportDefect: 'Devolver este artículo por defecto',
369
+ supportOptionDefect: 'Devolver esta opción por defecto',
370
+ ticket: 'Abrir la conversación',
371
+ returnTitle: 'Devolución',
372
+ returnTrack: 'Número de seguimiento de la devolución',
373
+ returnAmount: 'Importe del reembolso',
374
+ returnCounts: {
375
+ awaiting: 'Para devolver',
376
+ received: 'Devueltos',
377
+ approved: 'Aprobados para reembolso',
378
+ defect: 'De ellos, defectuosos',
379
+ },
380
+ refundToPay: 'Reembolso aprobado',
381
+ estimated:
382
+ 'Se está calculando el coste del envío. Después podrás pagar.',
383
+ comment: 'Comentario del pedido',
384
+ refreshRequired: 'Actualiza los pedidos antes de hacer otro cambio.',
385
+ statuses: {
386
+ processing: 'En preparación',
387
+ shipped: 'Enviado',
388
+ partlyShipped: 'Enviado en parte',
389
+ delivered: 'Entregado',
390
+ partlyDelivered: 'Entregado en parte',
391
+ canceled: 'Cancelado',
392
+ refund: 'Devolución',
393
+ },
394
+ statusHints: {
395
+ processing: 'El pedido está aceptado y se está preparando para el envío.',
396
+ shipped: 'Todos los envíos están en camino.',
397
+ partlyShipped:
398
+ 'Algunos envíos están en camino; otros se están preparando.',
399
+ delivered: 'Todos los envíos se han entregado.',
400
+ partlyDelivered:
401
+ 'Algunos envíos se han entregado; otros están en camino.',
402
+ canceled: 'El pedido se ha cancelado.',
403
+ refund: 'Se ha solicitado la devolución de artículos de este pedido.',
404
+ },
405
+ payments: {
406
+ notPaid: 'Sin pagar',
407
+ partlyPaid: 'Pagado en parte',
408
+ onDelivery: 'Pago contra reembolso',
409
+ paid: 'Pagado',
410
+ paidAfterCancel: 'Pagado tras la cancelación',
411
+ },
412
+ steps: {
413
+ placed: 'Realizado',
414
+ shipped: 'Enviado',
415
+ delivered: 'Entregado',
416
+ },
417
+ stepStates: {
418
+ done: 'Listo',
419
+ current: 'Ahora',
420
+ todo: 'Siguiente',
421
+ },
422
+ shipmentStates: {
423
+ preparing: 'En preparación',
424
+ sent: 'En camino',
425
+ delivered: 'Entregado',
426
+ canceled: 'Cancelado',
427
+ returned: 'Devuelto por el transportista',
428
+ },
429
+ };
430
+
287
431
  function russianPlural(count: number, forms: [string, string, string]) {
288
432
  const tens = count % 100;
289
433
  const ones = count % 10;
@@ -303,9 +447,12 @@ export function orderItemCount(locale: string, count: number) {
303
447
  return `${count} ${russianPlural(count, ['товар', 'товара', 'товаров'])}`;
304
448
  }
305
449
 
450
+ if (locale.toLowerCase().startsWith('es')) {
451
+ return `${count} ${count === 1 ? 'artículo' : 'artículos'}`;
452
+ }
306
453
  return `${count} ${count === 1 ? 'item' : 'items'}`;
307
454
  }
308
455
 
309
456
  export function orderLabels(locale: string) {
310
- return locale.toLowerCase().startsWith('ru') ? ru : en;
457
+ return locale.toLowerCase().startsWith('ru') ? ru : locale.toLowerCase().startsWith('es') ? es : en;
311
458
  }
@@ -109,6 +109,81 @@ const ru: PrivacyLabels = {
109
109
  },
110
110
  };
111
111
 
112
+ const es: PrivacyLabels = {
113
+ title: 'Política de privacidad',
114
+ lead: 'Qué datos recibe la tienda, para qué, con quién los comparte y cuánto tiempo los conserva.',
115
+ contents: 'Contenido',
116
+ operator: 'Responsable del tratamiento',
117
+ operatorUnknown: 'Los datos del responsable están en la página de contacto.',
118
+ sections: [
119
+ {
120
+ id: 'operator',
121
+ title: '1. Quién trata los datos',
122
+ text: [
123
+ 'El responsable del tratamiento es {company} (la Tienda). Los datos de la Tienda aparecen al final de esta página.',
124
+ 'Los datos se tratan conforme a la Ley Federal rusa n.º 152-FZ «Sobre datos personales».',
125
+ ],
126
+ },
127
+ {
128
+ id: 'data',
129
+ title: '2. Qué datos',
130
+ text: [
131
+ 'Cuenta: número de teléfono y, si los añades, nombre, dirección de correo, fecha de nacimiento y foto.',
132
+ 'Pedidos: productos, direcciones de entrega, nombre y teléfono del destinatario, importes, método y estado del pago, devoluciones. Los datos de la tarjeta se introducen en la página del proveedor de pagos; la Tienda no recibe números de tarjeta.',
133
+ 'Solicitudes de soporte, reseñas y comentarios, favoritos, suscripciones a productos e historial de búsqueda.',
134
+ 'Historial de accesos: fecha y hora, dirección IP, navegador y tipo de dispositivo.',
135
+ ],
136
+ },
137
+ {
138
+ id: 'purposes',
139
+ title: '3. Para qué',
140
+ text: [
141
+ 'Para que puedas iniciar sesión, hacer, pagar, recibir y devolver pedidos, recibir respuestas a tus solicitudes y publicar reseñas; para proteger la cuenta y cumplir las obligaciones legales. Los correos de novedades y promociones solo llegan si los has activado.',
142
+ ],
143
+ },
144
+ {
145
+ id: 'recipients',
146
+ title: '4. Quién recibe los datos',
147
+ text: [
148
+ 'Solo quienes los necesitan para cumplir un pedido, y solo lo que necesitan: servicios de envío, proveedores de pago, operadores de telecomunicaciones (para los códigos de confirmación) y la plataforma en cuyos servidores funciona la Tienda. Los datos no se venden.',
149
+ ],
150
+ },
151
+ {
152
+ id: 'storage',
153
+ title: '5. Cuánto tiempo se conservan',
154
+ text: [
155
+ 'Mientras existe la cuenta. Los registros de pedidos y pagos se conservan el tiempo que exige la legislación contable.',
156
+ ],
157
+ },
158
+ {
159
+ id: 'rights',
160
+ title: '6. Tus derechos',
161
+ text: [
162
+ 'En el perfil puedes cambiar tus datos, desactivar los correos y eliminar la cuenta. También puedes preguntar qué datos se tratan, pedir que se corrijan o eliminen y retirar tu consentimiento: escribe al soporte o usa la página de contacto.',
163
+ ],
164
+ },
165
+ {
166
+ id: 'cookies',
167
+ title: '7. Cookies y almacenamiento local',
168
+ text: [
169
+ 'El sitio solo usa las cookies que necesita para funcionar: sessionid mantiene tu sesión iniciada y csrftoken protege los formularios contra la falsificación de solicitudes.',
170
+ 'El almacenamiento local del navegador guarda el hecho de que ya has visto el aviso de cookies. No hay cookies publicitarias ni de analítica. Si bloqueas las cookies, no funcionan el inicio de sesión ni la compra.',
171
+ ],
172
+ },
173
+ {
174
+ id: 'changes',
175
+ title: '8. Cambios en esta política',
176
+ text: ['Una nueva versión se aplica desde su publicación en esta página.'],
177
+ },
178
+ ],
179
+ cookie: {
180
+ label: 'Aviso de cookies',
181
+ text: 'El sitio solo usa las cookies que necesita: para iniciar tu sesión y proteger los formularios.',
182
+ link: 'Más información',
183
+ ok: 'Aceptar',
184
+ },
185
+ };
186
+
112
187
  const en: PrivacyLabels = {
113
188
  title: 'Privacy policy',
114
189
  lead: 'Which data the store receives, why, who it shares it with and how long it keeps it.',
@@ -185,8 +260,8 @@ const en: PrivacyLabels = {
185
260
  };
186
261
 
187
262
  export function privacyLabels(locale: string, company = ''): PrivacyLabels {
188
- const copy = locale.toLowerCase().startsWith('ru') ? ru : en;
189
- const name = company || (copy === ru ? 'Магазин' : 'the Store');
263
+ const copy = locale.toLowerCase().startsWith('ru') ? ru : locale.toLowerCase().startsWith('es') ? es : en;
264
+ const name = company || (copy === ru ? 'Магазин' : copy === es ? 'la Tienda' : 'the Store');
190
265
 
191
266
  return {
192
267
  ...copy,
@@ -53,6 +53,33 @@ const labels = {
53
53
  submit: 'Подтвердить',
54
54
  cancel: 'Отмена',
55
55
  },
56
+ es: {
57
+ pending: 'Actualizando el producto…',
58
+ saved: 'Producto actualizado.',
59
+ failed: 'La solicitud ha fallado. Los datos confirmados del producto no han cambiado.',
60
+ unavailable: 'Esta acción no está disponible.',
61
+ login: 'Inicia sesión para guardar favoritos o avisos de disponibilidad.',
62
+ email:
63
+ 'Añade una dirección de correo a tu perfil para recibir avisos de disponibilidad.',
64
+ contact: 'Indica un correo electrónico o un número de teléfono para tu reserva.',
65
+ invalid:
66
+ 'Esta acción no está disponible para el producto o la cantidad seleccionados.',
67
+ refreshFailed:
68
+ 'La acción se ha aceptado, pero no se han podido actualizar los datos del producto. Vuelve a cargarlos antes de otra acción.',
69
+ retry: 'Recargar',
70
+ preorder: 'Reservar',
71
+ close: 'Cerrar',
72
+ preorderContact:
73
+ 'Deja un correo electrónico o un número de teléfono para que el vendedor pueda contactarte sobre esta reserva. Si tienes una cuenta, inicia sesión primero.',
74
+ preorderAccount: 'Tu reserva quedará vinculada a tu cuenta.',
75
+ preorderPending: 'Enviando…',
76
+ preorderSaved: 'Hemos recibido tu reserva.',
77
+ emailLabel: 'Correo electrónico',
78
+ phoneLabel: 'Teléfono',
79
+ signIn: 'Iniciar sesión',
80
+ submit: 'Confirmar',
81
+ cancel: 'Cancelar',
82
+ },
56
83
  };
57
84
 
58
85
  export function productActionLabels(locale: string) {
@@ -75,6 +75,43 @@ const labels = {
75
75
  previewUnpublished: 'Предпросмотр: товар не опубликован.',
76
76
  previewOption: 'Предпросмотр: товар опубликован только как вариант.',
77
77
  },
78
+ es: {
79
+ addFavorite: 'Añadir a favoritos',
80
+ removeFavorite: 'Quitar de favoritos',
81
+ saveFavorite: 'Guardar',
82
+ unsaveFavorite: 'Quitar',
83
+ add: 'Añadir',
84
+ addHint: 'Añadir al carrito',
85
+ increase: 'Aumentar cantidad',
86
+ decrease: 'Reducir cantidad',
87
+ remove: 'Quitar del carrito',
88
+ quantity: 'Cantidad',
89
+ subscribe: 'Avisarme',
90
+ subscribeHint: 'Avisarme cuando esté disponible',
91
+ unsubscribe: 'Cancelar aviso',
92
+ unsubscribeHint: 'Cancelar los avisos de disponibilidad',
93
+ preorder: 'Reservar',
94
+ unavailable: 'No disponible',
95
+ lowStock: 'Pocas unidades',
96
+ badgeNew: 'Nuevo',
97
+ badgePopular: 'Popular',
98
+ badgeDeal: 'Oferta',
99
+ badgeLowStock: 'Pocas unidades',
100
+ reviews: ['reseña', 'reseñas'],
101
+ variants: 'Variantes',
102
+ secondary: 'Variantes adicionales',
103
+ chooseVariant: 'Elige una variante',
104
+ closeVariants: 'Cerrar la selección de variante',
105
+ loadingVariants: 'Cargando las opciones disponibles…',
106
+ variantsFailed: 'No se han podido cargar las opciones. Inténtalo de nuevo.',
107
+ variantsUnavailable: 'La búsqueda de variantes secundarias no está disponible.',
108
+ variantsEmpty: 'No hay opciones secundarias para esta elección.',
109
+ retryVariants: 'Reintentar',
110
+ variantLoading: 'Cargando la variante seleccionada…',
111
+ variantFailed: 'No se ha podido cargar esta variante. Vuelve a seleccionarla para reintentar.',
112
+ previewUnpublished: 'Vista previa: este producto no está publicado.',
113
+ previewOption: 'Vista previa: este producto solo está publicado como opción.',
114
+ },
78
115
  };
79
116
 
80
117
  export function productLabels(locale: string) {