orionplace-react 0.7.6 → 0.7.8

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 (39) 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/orders/OrderDetails.tsx +2 -2
  5. package/templates/components/orionplace/search/MainSearch.tsx +2 -2
  6. package/templates/components/orionplace/shared/OrionplaceBreadcrumbs.tsx +1 -1
  7. package/templates/components/orionplace/shared/StorefrontPagination.tsx +1 -1
  8. package/templates/components/orionplace/storefront/StorefrontFooter.tsx +1 -1
  9. package/templates/hooks/useOrionplaceStorefront.tsx +26 -8
  10. package/templates/lib/orionplace/accountLabels.ts +7 -0
  11. package/templates/lib/orionplace/activityLabels.ts +32 -1
  12. package/templates/lib/orionplace/blogLabels.ts +47 -1
  13. package/templates/lib/orionplace/browseLabels.ts +48 -1
  14. package/templates/lib/orionplace/cartLabels.ts +128 -1
  15. package/templates/lib/orionplace/cartPreview.ts +15 -0
  16. package/templates/lib/orionplace/categoryLabels.ts +9 -1
  17. package/templates/lib/orionplace/contactLabels.ts +51 -1
  18. package/templates/lib/orionplace/directoryLabels.ts +66 -1
  19. package/templates/lib/orionplace/errorPageLabels.ts +15 -0
  20. package/templates/lib/orionplace/featureLabels.ts +136 -1
  21. package/templates/lib/orionplace/featuredLabels.ts +10 -0
  22. package/templates/lib/orionplace/footerLabels.ts +17 -1
  23. package/templates/lib/orionplace/headerLabels.ts +30 -0
  24. package/templates/lib/orionplace/homeLabels.ts +22 -0
  25. package/templates/lib/orionplace/manufacturerIndex.ts +15 -0
  26. package/templates/lib/orionplace/orderLabels.ts +148 -1
  27. package/templates/lib/orionplace/orderPresentation.ts +45 -2
  28. package/templates/lib/orionplace/privacyLabels.ts +77 -2
  29. package/templates/lib/orionplace/productActionLabels.ts +48 -0
  30. package/templates/lib/orionplace/productLabels.ts +37 -0
  31. package/templates/lib/orionplace/profileLabels.ts +75 -1
  32. package/templates/lib/orionplace/promoLabels.ts +37 -1
  33. package/templates/lib/orionplace/reviewLabels.ts +81 -1
  34. package/templates/lib/orionplace/sessionLabels.ts +12 -1
  35. package/templates/lib/orionplace/subscriptionLabels.ts +34 -1
  36. package/templates/lib/orionplace/subscriptionManageLabels.ts +118 -2
  37. package/templates/lib/orionplace/tariffLabels.ts +54 -3
  38. package/templates/lib/orionplace/tariffVariables.ts +38 -0
  39. package/templates/lib/orionplace/ticketLabels.ts +94 -1
@@ -97,11 +97,60 @@ const labels = {
97
97
  unavailableMedia: 'У тарифа нет изображений или видео.',
98
98
  notFound: 'Этот тариф недоступен.',
99
99
  },
100
+ es: {
101
+ trial: 'Prueba',
102
+ free: 'Gratis',
103
+ periods: 'Periodo de suscripción',
104
+ noPeriods: 'No hay periodos de suscripción disponibles.',
105
+ adminOnly:
106
+ 'Este plan lo asigna el administrador de la tienda. No se puede contratar en línea.',
107
+ closed: 'Las nuevas suscripciones a este plan están cerradas.',
108
+ trialUsed: 'Ya has usado la prueba de esta suscripción.',
109
+ subscribe: 'Suscribirse',
110
+ tryTrial: 'Probar',
111
+ perPeriod: 'por {days}',
112
+ trialBadge: 'Prueba gratuita · {days}',
113
+ subscribeAria: 'Suscribirse a {name} por {days}',
114
+ trialAria: 'Probar {name} gratis durante {days}',
115
+ features: 'Incluido en el plan',
116
+ notIncluded: 'no incluido',
117
+ options: 'Opciones',
118
+ details: 'Detalles',
119
+ title: 'Detalles de la suscripción',
120
+ option: 'Opción adicional',
121
+ noOption: 'Sin opción adicional',
122
+ promo: 'Código promocional',
123
+ base: 'Plan',
124
+ extra: 'Opción',
125
+ total: 'Total',
126
+ beforePromo: 'Total antes del código promocional',
127
+ payment:
128
+ 'Las suscripciones de pago se cobran del saldo de tu cuenta. El importe final incluye cualquier descuento promocional aplicable.',
129
+ trialInfo: 'La prueba está disponible una vez por suscripción para tu cuenta.',
130
+ wallet: 'Recargar saldo',
131
+ confirm: 'Suscribirse',
132
+ confirmTrial: 'Empezar',
133
+ pending: 'Enviando…',
134
+ complete: 'Suscripción activada',
135
+ mine: 'Mis suscripciones',
136
+ close: 'Cerrar',
137
+ invalid: 'Este periodo u opción ya no está disponible.',
138
+ plans: 'Planes de suscripción',
139
+ gallery: 'Imágenes y vídeos del plan',
140
+ previousMedia: 'Anterior',
141
+ nextMedia: 'Siguiente',
142
+ image: 'Imagen del plan',
143
+ video: 'Vídeo del plan',
144
+ about: 'Sobre este plan',
145
+ unavailableMedia: 'Este plan no tiene imágenes ni vídeos.',
146
+ notFound: 'Este plan de suscripción no está disponible.',
147
+ },
100
148
  };
101
149
 
102
150
  const dayWords = {
103
151
  en: { one: 'day', other: 'days' },
104
152
  ru: { one: 'день', few: 'дня', many: 'дней', other: 'дней' },
153
+ es: { one: 'día', other: 'días' },
105
154
  };
106
155
 
107
156
  export function tariffLabels(locale: string) {
@@ -109,9 +158,11 @@ export function tariffLabels(locale: string) {
109
158
  }
110
159
 
111
160
  export function tariffDays(days: number, locale: string) {
112
- const russian = locale.toLowerCase().startsWith('ru');
113
- const words: Record<string, string> = russian ? dayWords.ru : dayWords.en;
114
- const category = new Intl.PluralRules(russian ? 'ru' : 'en').select(days);
161
+ const language = locale.toLowerCase().startsWith('ru')
162
+ ? 'ru'
163
+ : locale.toLowerCase().startsWith('es') ? 'es' : 'en';
164
+ const words: Record<string, string> = dayWords[language];
165
+ const category = new Intl.PluralRules(language).select(days);
115
166
  return `${days} ${words[category] ?? words.other}`;
116
167
  }
117
168
 
@@ -82,11 +82,49 @@ const copy: Record<string, Record<string, TariffVariableCopy>> = {
82
82
  unlimited: true,
83
83
  },
84
84
  },
85
+ es: {
86
+ sales_module: {
87
+ name: 'Módulo de ventas',
88
+ hint: 'Todo lo necesario para vender: catálogo, carrito, pedidos, pagos y vendedores.',
89
+ },
90
+ blog_module: {
91
+ name: 'Módulo de blog',
92
+ hint: 'Una sección de contenido con categorías, comentarios y lectura de pago.',
93
+ },
94
+ qr_module: {
95
+ name: 'Módulo QR',
96
+ hint: 'Etiquetado QR de las existencias físicas para almacén y venta, junto con los ajustes de existencias del panel de gestión.',
97
+ },
98
+ max_files_size: {
99
+ name: 'Almacenamiento de archivos',
100
+ hint: 'Almacenamiento total del proyecto. Cada subida se suma al almacenamiento ya usado, y se rechaza una subida que supere este total.',
101
+ unit: 'megabytes',
102
+ unlimited: true,
103
+ },
104
+ max_api_requests: {
105
+ name: 'Solicitudes a la API al mes',
106
+ hint: 'Cuántas solicitudes a la API puede hacer el proyecto durante un mes natural. El contador vuelve a empezar el primer día del mes siguiente.',
107
+ unit: 'count',
108
+ unlimited: true,
109
+ },
110
+ max_front_hosts: {
111
+ name: 'Dominios de escaparate',
112
+ hint: 'Cuántos dominios de escaparate se pueden conectar a la vez.',
113
+ unit: 'count',
114
+ },
115
+ max_sellers: {
116
+ name: 'Vendedores',
117
+ hint: 'Cuántas cuentas de vendedor puede usar la tienda. Con un solo vendedor se activa la interfaz simplificada de tienda única.',
118
+ unit: 'count',
119
+ unlimited: true,
120
+ },
121
+ },
85
122
  };
86
123
 
87
124
  const units = {
88
125
  en: { megabytes: 'MB', gigabytes: 'GB', unlimited: 'Unlimited' },
89
126
  ru: { megabytes: 'МБ', gigabytes: 'ГБ', unlimited: 'Без ограничений' },
127
+ es: { megabytes: 'MB', gigabytes: 'GB', unlimited: 'Ilimitado' },
90
128
  };
91
129
 
92
130
  export function tariffVariableCopy(locale: string) {
@@ -192,6 +192,99 @@ const ru: typeof en = {
192
192
  decisionDeclined: 'Отклонено',
193
193
  };
194
194
 
195
+ const es: typeof en = {
196
+ title: 'Soporte',
197
+ new: 'Nueva conversación',
198
+ newAction: 'Nuevo',
199
+ newHint: 'Nueva conversación',
200
+ ticket: 'Conversación',
201
+ open: 'Abiertas',
202
+ closed: 'Cerradas',
203
+ statusOpen: 'Abiertas',
204
+ statusClosed: 'Cerradas',
205
+ empty: 'No hay conversaciones en esta categoría.',
206
+ message: 'Mensaje',
207
+ images: 'Imágenes',
208
+ attach: 'Adjuntar',
209
+ choose: 'Elige una conversación o empieza una nueva.',
210
+ back: 'Conversaciones',
211
+ backHint: 'Todas las conversaciones',
212
+ send: 'Enviar',
213
+ create: 'Crear',
214
+ close: 'Cerrar',
215
+ closeHint: 'Cerrar la conversación',
216
+ closeQuestion:
217
+ '¿Cerrar esta conversación? Ya no podrás responder aquí.',
218
+ delete: 'Eliminar',
219
+ deleteHint: 'Eliminar la conversación',
220
+ deleteQuestion: '¿Eliminar esta conversación y su mensaje?',
221
+ rating: 'Valora el soporte que recibiste',
222
+ unrated: 'Sin valoración',
223
+ rated: 'Tu valoración',
224
+ image: 'Imagen adjunta',
225
+ imageError: 'No se ha podido cargar esta imagen.',
226
+ removeImage: 'Quitar la imagen',
227
+ tooMany: 'Elige hasta cinco imágenes para un mensaje.',
228
+ product: 'Sobre un artículo de tu pedido',
229
+ option: 'Sobre una opción de tu pedido',
230
+ subscription: 'Sobre tu suscripción',
231
+ common: 'Describe en qué podemos ayudarte.',
232
+ unread: 'Mensajes sin leer',
233
+ sent: 'Enviado',
234
+ order: 'Ver el pedido',
235
+ refreshRequired: 'Actualiza la conversación antes de enviar otro mensaje.',
236
+ waitSupport: 'Espera la respuesta del soporte. Después podrás añadir detalles.',
237
+ waitDelay:
238
+ 'Espera la respuesta del soporte. Podrás enviar otro mensaje unos minutos después del anterior.',
239
+ draftLost: 'El mensaje se ha guardado. Actualiza para ver la conversación.',
240
+ typeCommon: 'Pregunta general',
241
+ typeOrder: 'Artículo del pedido',
242
+ typeSeller: 'Pregunta al vendedor',
243
+ typeSubscription: 'Suscripción',
244
+ refundCanceled: 'Devolución cancelada',
245
+ refundCreated: 'Pendiente de envío',
246
+ refundSent: 'Devolución enviada',
247
+ refundReceived: 'Recibida por la tienda',
248
+ refundDone: 'Reembolso aprobado',
249
+ refundProblem: 'Reembolso rechazado',
250
+ refundHints: {
251
+ canceled: 'Esta devolución se ha cancelado, así que no habrá reembolso.',
252
+ created: 'Devuelve los artículos de abajo con el transportista de esta devolución.',
253
+ sent: 'La devolución va de camino a la tienda.',
254
+ received: 'La tienda ha recibido la devolución.',
255
+ done: 'Se ha aprobado el reembolso de los artículos devueltos.',
256
+ problem:
257
+ 'La tienda ha rechazado los artículos devueltos, así que ese dinero no se paga.',
258
+ },
259
+ refund: 'Devolución',
260
+ refundCarrier: 'Transportista',
261
+ refundTrack: 'Número de seguimiento de la devolución',
262
+ refundAmount: 'Importe del reembolso',
263
+ refundCarrierStatus: 'Estado del transportista',
264
+ refundItems: 'Artículos de esta devolución',
265
+ subject: 'Esta conversación trata sobre',
266
+ subscriptionSubject: 'Esta conversación trata sobre la suscripción',
267
+ itemUnknown: 'El artículo ya no está disponible',
268
+ itemOption: 'Opción',
269
+ itemQuantity: 'Cantidad',
270
+ itemPrice: 'Pagado',
271
+ itemPicture: 'Imagen',
272
+ refundCounts: {
273
+ awaiting: 'Para devolver',
274
+ received: 'Devueltos',
275
+ approved: 'Aprobados para reembolso',
276
+ defect: 'De ellos, defectuosos',
277
+ },
278
+ defect: 'Defecto',
279
+ defectOptional: 'El artículo es defectuoso',
280
+ defectOnly:
281
+ 'El plazo normal de devolución ha terminado; solo es posible devolverlo por defecto.',
282
+ decision: 'Decisión',
283
+ decisionPending: 'En revisión',
284
+ decisionApproved: 'Aprobado',
285
+ decisionDeclined: 'Rechazado',
286
+ };
287
+
195
288
  export type TicketStatusIcon = 'lock' | 'unlock';
196
289
 
197
290
  export interface TicketStatusView {
@@ -200,7 +293,7 @@ export interface TicketStatusView {
200
293
  }
201
294
 
202
295
  export function ticketLabels(locale: string) {
203
- return locale.toLowerCase().startsWith('ru') ? ru : en;
296
+ return locale.toLowerCase().startsWith('ru') ? ru : locale.toLowerCase().startsWith('es') ? es : en;
204
297
  }
205
298
 
206
299
  // The backend status text is not translated, so known statuses use the