@contractspec/lib.content-gen 3.7.6 → 3.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.
- package/README.md +63 -32
- package/dist/browser/generators/blog.js +132 -132
- package/dist/browser/generators/email.js +132 -132
- package/dist/browser/generators/index.js +132 -132
- package/dist/browser/generators/landing-page.js +132 -132
- package/dist/browser/generators/social.js +132 -132
- package/dist/browser/i18n/catalogs/index.js +112 -112
- package/dist/browser/i18n/index.js +132 -132
- package/dist/browser/i18n/locale.js +2 -2
- package/dist/browser/i18n/messages.js +112 -112
- package/dist/browser/index.js +132 -132
- package/dist/browser/seo/index.js +132 -132
- package/dist/browser/seo/optimizer.js +132 -132
- package/dist/generators/blog.js +132 -132
- package/dist/generators/email.js +132 -132
- package/dist/generators/index.d.ts +1 -1
- package/dist/generators/index.js +132 -132
- package/dist/generators/landing-page.d.ts +1 -1
- package/dist/generators/landing-page.js +132 -132
- package/dist/generators/social.js +132 -132
- package/dist/i18n/catalogs/index.d.ts +1 -1
- package/dist/i18n/catalogs/index.js +112 -112
- package/dist/i18n/index.d.ts +7 -7
- package/dist/i18n/index.js +132 -132
- package/dist/i18n/locale.d.ts +1 -1
- package/dist/i18n/locale.js +2 -2
- package/dist/i18n/messages.js +112 -112
- package/dist/index.d.ts +1 -1
- package/dist/index.js +132 -132
- package/dist/node/generators/blog.js +132 -132
- package/dist/node/generators/email.js +132 -132
- package/dist/node/generators/index.js +132 -132
- package/dist/node/generators/landing-page.js +132 -132
- package/dist/node/generators/social.js +132 -132
- package/dist/node/i18n/catalogs/index.js +112 -112
- package/dist/node/i18n/index.js +132 -132
- package/dist/node/i18n/locale.js +2 -2
- package/dist/node/i18n/messages.js +112 -112
- package/dist/node/index.js +132 -132
- package/dist/node/seo/index.js +132 -132
- package/dist/node/seo/optimizer.js +132 -132
- package/dist/seo/index.js +132 -132
- package/dist/seo/optimizer.d.ts +1 -1
- package/dist/seo/optimizer.js +132 -132
- package/dist/types.d.ts +1 -1
- package/package.json +5 -5
package/dist/node/seo/index.js
CHANGED
|
@@ -272,38 +272,38 @@ var enMessages = defineTranslation({
|
|
|
272
272
|
}
|
|
273
273
|
});
|
|
274
274
|
|
|
275
|
-
// src/i18n/catalogs/
|
|
275
|
+
// src/i18n/catalogs/es.ts
|
|
276
276
|
import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts-spec/translations";
|
|
277
|
-
var
|
|
277
|
+
var esMessages = defineTranslation2({
|
|
278
278
|
meta: {
|
|
279
279
|
key: "content-gen.messages",
|
|
280
280
|
version: "1.0.0",
|
|
281
281
|
domain: "content-gen",
|
|
282
|
-
description: "
|
|
282
|
+
description: "Spanish translations for the content-gen package",
|
|
283
283
|
owners: ["platform"],
|
|
284
284
|
stability: "experimental"
|
|
285
285
|
},
|
|
286
|
-
locale: "
|
|
286
|
+
locale: "es",
|
|
287
287
|
fallback: "en",
|
|
288
288
|
messages: {
|
|
289
289
|
"prompt.blog.system": {
|
|
290
|
-
value: "
|
|
290
|
+
value: "Eres un redactor de marketing de producto. Produce JSON con title, subtitle, intro, sections[].heading/body/bullets, outro.",
|
|
291
291
|
description: "Blog generator LLM system prompt"
|
|
292
292
|
},
|
|
293
293
|
"prompt.email.system": {
|
|
294
|
-
value: "
|
|
294
|
+
value: "Redacta un correo de marketing de producto en JSON {subject, previewText, body, cta}.",
|
|
295
295
|
description: "Email generator LLM system prompt"
|
|
296
296
|
},
|
|
297
297
|
"prompt.landing.system": {
|
|
298
|
-
value: "
|
|
298
|
+
value: "Escribe JSON para una página de aterrizaje con hero/highlights/socialProof/faq.",
|
|
299
299
|
description: "Landing page generator LLM system prompt"
|
|
300
300
|
},
|
|
301
301
|
"prompt.social.system": {
|
|
302
|
-
value: "
|
|
302
|
+
value: "Crea un array JSON de publicaciones sociales para twitter/linkedin/threads con body, hashtags, cta.",
|
|
303
303
|
description: "Social post generator LLM system prompt"
|
|
304
304
|
},
|
|
305
305
|
"blog.intro": {
|
|
306
|
-
value: "
|
|
306
|
+
value: "Equipos como {role} enfrentan {problems}. {title} cambia eso gracias a {summary}.",
|
|
307
307
|
description: "Blog post intro paragraph template",
|
|
308
308
|
placeholders: [
|
|
309
309
|
{ name: "role", type: "string" },
|
|
@@ -313,39 +313,39 @@ var frMessages = defineTranslation2({
|
|
|
313
313
|
]
|
|
314
314
|
},
|
|
315
315
|
"blog.heading.whyNow": {
|
|
316
|
-
value: "
|
|
316
|
+
value: "Por qué ahora",
|
|
317
317
|
description: "Blog section heading: why now"
|
|
318
318
|
},
|
|
319
319
|
"blog.heading.whatYouGet": {
|
|
320
|
-
value: "
|
|
320
|
+
value: "Lo que obtienes",
|
|
321
321
|
description: "Blog section heading: what you get"
|
|
322
322
|
},
|
|
323
323
|
"blog.heading.proofItWorks": {
|
|
324
|
-
value: "
|
|
324
|
+
value: "Prueba de que funciona",
|
|
325
325
|
description: "Blog section heading: proof it works"
|
|
326
326
|
},
|
|
327
327
|
"blog.body.whatYouGet": {
|
|
328
|
-
value: "
|
|
328
|
+
value: "Una pila enfocada construida para la automatización segura con políticas.",
|
|
329
329
|
description: "Blog section body: what you get"
|
|
330
330
|
},
|
|
331
331
|
"blog.body.proofItWorks": {
|
|
332
|
-
value: "
|
|
332
|
+
value: "Los equipos que usan el modelo reportan logros medibles.",
|
|
333
333
|
description: "Blog section body: proof it works"
|
|
334
334
|
},
|
|
335
335
|
"blog.metric.launchWorkflows": {
|
|
336
|
-
value: "
|
|
336
|
+
value: "Lanza flujos de trabajo en minutos",
|
|
337
337
|
description: "Default metric: launch workflows"
|
|
338
338
|
},
|
|
339
339
|
"blog.metric.cutReviewTime": {
|
|
340
|
-
value: "
|
|
340
|
+
value: "Reduce el tiempo de revisión en un 60 %",
|
|
341
341
|
description: "Default metric: cut review time"
|
|
342
342
|
},
|
|
343
343
|
"blog.outro.default": {
|
|
344
|
-
value: "
|
|
344
|
+
value: "¿Listo para verlo en vivo? Lanza un sandbox en menos de 5 minutos.",
|
|
345
345
|
description: "Default blog outro / call to action"
|
|
346
346
|
},
|
|
347
347
|
"blog.whyNow": {
|
|
348
|
-
value: "
|
|
348
|
+
value: "Los equipos de {audience} están atascados con {pains}. {title} ofrece barreras de protección sin ralentizar las entregas.",
|
|
349
349
|
description: "Blog why-now section body template",
|
|
350
350
|
placeholders: [
|
|
351
351
|
{ name: "audience", type: "string" },
|
|
@@ -354,78 +354,78 @@ var frMessages = defineTranslation2({
|
|
|
354
354
|
]
|
|
355
355
|
},
|
|
356
356
|
"blog.audience.industry": {
|
|
357
|
-
value: "
|
|
357
|
+
value: " en el sector {industry}",
|
|
358
358
|
description: "Audience industry suffix for blog why-now",
|
|
359
359
|
placeholders: [{ name: "industry", type: "string" }]
|
|
360
360
|
},
|
|
361
361
|
"email.subject.announcement.launch": {
|
|
362
|
-
value: "
|
|
362
|
+
value: "Lanzamiento: {title}",
|
|
363
363
|
description: "Announcement email subject variant: launch",
|
|
364
364
|
placeholders: [{ name: "title", type: "string" }]
|
|
365
365
|
},
|
|
366
366
|
"email.subject.announcement.live": {
|
|
367
|
-
value: "{title}
|
|
367
|
+
value: "{title} ya está disponible",
|
|
368
368
|
description: "Announcement email subject variant: live",
|
|
369
369
|
placeholders: [{ name: "title", type: "string" }]
|
|
370
370
|
},
|
|
371
371
|
"email.subject.announcement.new": {
|
|
372
|
-
value: "
|
|
372
|
+
value: "Nuevo: {title}",
|
|
373
373
|
description: "Announcement email subject variant: new",
|
|
374
374
|
placeholders: [{ name: "title", type: "string" }]
|
|
375
375
|
},
|
|
376
376
|
"email.subject.onboarding.getStarted": {
|
|
377
|
-
value: "
|
|
377
|
+
value: "Empieza con {title}",
|
|
378
378
|
description: "Onboarding email subject variant: get started",
|
|
379
379
|
placeholders: [{ name: "title", type: "string" }]
|
|
380
380
|
},
|
|
381
381
|
"email.subject.onboarding.guide": {
|
|
382
|
-
value: "
|
|
382
|
+
value: "Tu guía de {title}",
|
|
383
383
|
description: "Onboarding email subject variant: guide",
|
|
384
384
|
placeholders: [{ name: "title", type: "string" }]
|
|
385
385
|
},
|
|
386
386
|
"email.subject.nurture.speeds": {
|
|
387
|
-
value: "
|
|
387
|
+
value: "Cómo {title} acelera las operaciones",
|
|
388
388
|
description: "Nurture email subject variant: speeds ops",
|
|
389
389
|
placeholders: [{ name: "title", type: "string" }]
|
|
390
390
|
},
|
|
391
391
|
"email.subject.nurture.proof": {
|
|
392
|
-
value: "
|
|
392
|
+
value: "Prueba de que {title} funciona",
|
|
393
393
|
description: "Nurture email subject variant: proof",
|
|
394
394
|
placeholders: [{ name: "title", type: "string" }]
|
|
395
395
|
},
|
|
396
396
|
"email.subject.fallback": {
|
|
397
|
-
value: "
|
|
397
|
+
value: "Actualización de {title}",
|
|
398
398
|
description: "Fallback email subject line",
|
|
399
399
|
placeholders: [{ name: "title", type: "string" }]
|
|
400
400
|
},
|
|
401
401
|
"email.preview.defaultWin": {
|
|
402
|
-
value: "
|
|
402
|
+
value: "entregan más rápido sin brechas de cumplimiento",
|
|
403
403
|
description: "Default win text for email preview"
|
|
404
404
|
},
|
|
405
405
|
"email.preview.template": {
|
|
406
|
-
value: "
|
|
406
|
+
value: "Descubre cómo los equipos {win}.",
|
|
407
407
|
description: "Email preview text template",
|
|
408
408
|
placeholders: [{ name: "win", type: "string" }]
|
|
409
409
|
},
|
|
410
410
|
"email.body.greeting": {
|
|
411
|
-
value: "
|
|
411
|
+
value: "Hola,",
|
|
412
412
|
description: "Email body greeting"
|
|
413
413
|
},
|
|
414
414
|
"email.body.reasons": {
|
|
415
|
-
value: "
|
|
415
|
+
value: "Principales razones por las que los equipos adoptan {title}:",
|
|
416
416
|
description: "Email body reasons intro",
|
|
417
417
|
placeholders: [{ name: "title", type: "string" }]
|
|
418
418
|
},
|
|
419
419
|
"email.cta.sandbox": {
|
|
420
|
-
value: "
|
|
420
|
+
value: "Lanza un sandbox",
|
|
421
421
|
description: "Default CTA: spin up a sandbox"
|
|
422
422
|
},
|
|
423
423
|
"email.cta.explore": {
|
|
424
|
-
value: "
|
|
424
|
+
value: "Explora el sandbox",
|
|
425
425
|
description: "Default CTA: explore the sandbox"
|
|
426
426
|
},
|
|
427
427
|
"email.hook.announcement": {
|
|
428
|
-
value: "{title}
|
|
428
|
+
value: "{title} ya está disponible. {summary}",
|
|
429
429
|
description: "Announcement variant hook",
|
|
430
430
|
placeholders: [
|
|
431
431
|
{ name: "title", type: "string" },
|
|
@@ -433,78 +433,78 @@ var frMessages = defineTranslation2({
|
|
|
433
433
|
]
|
|
434
434
|
},
|
|
435
435
|
"email.hook.onboarding": {
|
|
436
|
-
value: "
|
|
436
|
+
value: "Aquí tienes tu siguiente paso para desbloquear {title}.",
|
|
437
437
|
description: "Onboarding variant hook",
|
|
438
438
|
placeholders: [{ name: "title", type: "string" }]
|
|
439
439
|
},
|
|
440
440
|
"email.hook.nurture": {
|
|
441
|
-
value: "
|
|
441
|
+
value: "Operadores como {role} siguen preguntando cómo automatizar las verificaciones de cumplimiento. Esto es lo que funciona.",
|
|
442
442
|
description: "Nurture variant hook",
|
|
443
443
|
placeholders: [{ name: "role", type: "string" }]
|
|
444
444
|
},
|
|
445
445
|
"landing.eyebrow.defaultIndustry": {
|
|
446
|
-
value: "
|
|
446
|
+
value: "Operaciones",
|
|
447
447
|
description: "Default industry for landing page eyebrow"
|
|
448
448
|
},
|
|
449
449
|
"landing.eyebrow.template": {
|
|
450
|
-
value: "
|
|
450
|
+
value: "Equipos de {industry}",
|
|
451
451
|
description: "Landing page eyebrow template",
|
|
452
452
|
placeholders: [{ name: "industry", type: "string" }]
|
|
453
453
|
},
|
|
454
454
|
"landing.cta.primary": {
|
|
455
|
-
value: "
|
|
455
|
+
value: "Lanzar un sandbox",
|
|
456
456
|
description: "Landing page primary CTA"
|
|
457
457
|
},
|
|
458
458
|
"landing.cta.secondary": {
|
|
459
|
-
value: "
|
|
459
|
+
value: "Ver documentación",
|
|
460
460
|
description: "Landing page secondary CTA"
|
|
461
461
|
},
|
|
462
462
|
"landing.highlight.policySafe": {
|
|
463
|
-
value: "Conforme
|
|
463
|
+
value: "Conforme a políticas por defecto",
|
|
464
464
|
description: "Landing page highlight heading 1"
|
|
465
465
|
},
|
|
466
466
|
"landing.highlight.autoAdapts": {
|
|
467
|
-
value: "
|
|
467
|
+
value: "Se adapta automáticamente por inquilino",
|
|
468
468
|
description: "Landing page highlight heading 2"
|
|
469
469
|
},
|
|
470
470
|
"landing.highlight.launchReady": {
|
|
471
|
-
value: "
|
|
471
|
+
value: "Listo para lanzar en días",
|
|
472
472
|
description: "Landing page highlight heading 3"
|
|
473
473
|
},
|
|
474
474
|
"landing.highlight.fallback": {
|
|
475
|
-
value: "
|
|
475
|
+
value: "Capacidad clave",
|
|
476
476
|
description: "Fallback highlight heading"
|
|
477
477
|
},
|
|
478
478
|
"landing.socialProof.heading": {
|
|
479
|
-
value: "
|
|
479
|
+
value: "Equipos que usan ContractSpec",
|
|
480
480
|
description: "Social proof section heading"
|
|
481
481
|
},
|
|
482
482
|
"landing.socialProof.defaultQuote": {
|
|
483
|
-
value: "«
|
|
483
|
+
value: "« Entregamos flujos de trabajo conformes 5 veces más rápido reduciendo a la mitad las tareas operativas. »",
|
|
484
484
|
description: "Default social proof quote"
|
|
485
485
|
},
|
|
486
486
|
"landing.faq.policiesEnforced.heading": {
|
|
487
|
-
value: "
|
|
487
|
+
value: "¿Cómo se mantienen las políticas aplicadas?",
|
|
488
488
|
description: "FAQ heading: policies enforced"
|
|
489
489
|
},
|
|
490
490
|
"landing.faq.policiesEnforced.body": {
|
|
491
|
-
value: "
|
|
491
|
+
value: "Todos los flujos se compilan desde especificaciones TypeScript y pasan verificaciones PDP antes de ejecutarse, evitando lógica no autorizada.",
|
|
492
492
|
description: "FAQ body: policies enforced"
|
|
493
493
|
},
|
|
494
494
|
"landing.faq.existingStack.heading": {
|
|
495
|
-
value: "
|
|
495
|
+
value: "¿Es compatible con nuestra pila existente?",
|
|
496
496
|
description: "FAQ heading: existing stack"
|
|
497
497
|
},
|
|
498
498
|
"landing.faq.existingStack.body": {
|
|
499
|
-
value: "
|
|
499
|
+
value: "Los adaptadores se conectan a REST, GraphQL o MCP. Las integraciones son agnósticas respecto al proveedor.",
|
|
500
500
|
description: "FAQ body: existing stack"
|
|
501
501
|
},
|
|
502
502
|
"landing.faq.compliance.heading": {
|
|
503
|
-
value: "
|
|
503
|
+
value: "¿Qué pasa con los requisitos de cumplimiento?",
|
|
504
504
|
description: "FAQ heading: compliance requirements"
|
|
505
505
|
},
|
|
506
506
|
"social.cta.linkedin": {
|
|
507
|
-
value: "
|
|
507
|
+
value: "Reserva una demo de 15 min",
|
|
508
508
|
description: "LinkedIn post default CTA"
|
|
509
509
|
},
|
|
510
510
|
"social.cta.twitter": {
|
|
@@ -512,7 +512,7 @@ var frMessages = defineTranslation2({
|
|
|
512
512
|
description: "Twitter post default CTA"
|
|
513
513
|
},
|
|
514
514
|
"social.body.threads": {
|
|
515
|
-
value: "Ops +
|
|
515
|
+
value: "Ops + cumplimiento pueden avanzar rápido. {title} automatiza las barreras para que los equipos entreguen a diario.",
|
|
516
516
|
description: "Threads post body template",
|
|
517
517
|
placeholders: [{ name: "title", type: "string" }]
|
|
518
518
|
},
|
|
@@ -526,7 +526,7 @@ var frMessages = defineTranslation2({
|
|
|
526
526
|
placeholders: [{ name: "title", type: "string" }]
|
|
527
527
|
},
|
|
528
528
|
"seo.metaDescription": {
|
|
529
|
-
value: "{summary} —
|
|
529
|
+
value: "{summary} — diseñado para {role}{industry}.",
|
|
530
530
|
description: "SEO meta description template",
|
|
531
531
|
placeholders: [
|
|
532
532
|
{ name: "summary", type: "string" },
|
|
@@ -535,49 +535,49 @@ var frMessages = defineTranslation2({
|
|
|
535
535
|
]
|
|
536
536
|
},
|
|
537
537
|
"seo.offer.default": {
|
|
538
|
-
value: "
|
|
538
|
+
value: "Empieza a construir con ContractSpec",
|
|
539
539
|
description: "Default offer description for schema markup"
|
|
540
540
|
},
|
|
541
541
|
"seo.audience.industry": {
|
|
542
|
-
value: "
|
|
542
|
+
value: " en el sector {industry}",
|
|
543
543
|
description: "Audience industry suffix for SEO description",
|
|
544
544
|
placeholders: [{ name: "industry", type: "string" }]
|
|
545
545
|
}
|
|
546
546
|
}
|
|
547
547
|
});
|
|
548
548
|
|
|
549
|
-
// src/i18n/catalogs/
|
|
549
|
+
// src/i18n/catalogs/fr.ts
|
|
550
550
|
import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts-spec/translations";
|
|
551
|
-
var
|
|
551
|
+
var frMessages = defineTranslation3({
|
|
552
552
|
meta: {
|
|
553
553
|
key: "content-gen.messages",
|
|
554
554
|
version: "1.0.0",
|
|
555
555
|
domain: "content-gen",
|
|
556
|
-
description: "
|
|
556
|
+
description: "French translations for the content-gen package",
|
|
557
557
|
owners: ["platform"],
|
|
558
558
|
stability: "experimental"
|
|
559
559
|
},
|
|
560
|
-
locale: "
|
|
560
|
+
locale: "fr",
|
|
561
561
|
fallback: "en",
|
|
562
562
|
messages: {
|
|
563
563
|
"prompt.blog.system": {
|
|
564
|
-
value: "
|
|
564
|
+
value: "Vous êtes un rédacteur marketing produit. Produisez du JSON avec title, subtitle, intro, sections[].heading/body/bullets, outro.",
|
|
565
565
|
description: "Blog generator LLM system prompt"
|
|
566
566
|
},
|
|
567
567
|
"prompt.email.system": {
|
|
568
|
-
value: "
|
|
568
|
+
value: "Rédigez un e-mail marketing produit en JSON {subject, previewText, body, cta}.",
|
|
569
569
|
description: "Email generator LLM system prompt"
|
|
570
570
|
},
|
|
571
571
|
"prompt.landing.system": {
|
|
572
|
-
value: "
|
|
572
|
+
value: "Écrivez du JSON pour une page d'atterrissage avec hero/highlights/socialProof/faq.",
|
|
573
573
|
description: "Landing page generator LLM system prompt"
|
|
574
574
|
},
|
|
575
575
|
"prompt.social.system": {
|
|
576
|
-
value: "
|
|
576
|
+
value: "Créez un tableau JSON de posts sociaux pour twitter/linkedin/threads avec body, hashtags, cta.",
|
|
577
577
|
description: "Social post generator LLM system prompt"
|
|
578
578
|
},
|
|
579
579
|
"blog.intro": {
|
|
580
|
-
value: "
|
|
580
|
+
value: "Les équipes comme {role} font face à {problems}. {title} change la donne grâce à {summary}.",
|
|
581
581
|
description: "Blog post intro paragraph template",
|
|
582
582
|
placeholders: [
|
|
583
583
|
{ name: "role", type: "string" },
|
|
@@ -587,39 +587,39 @@ var esMessages = defineTranslation3({
|
|
|
587
587
|
]
|
|
588
588
|
},
|
|
589
589
|
"blog.heading.whyNow": {
|
|
590
|
-
value: "
|
|
590
|
+
value: "Pourquoi maintenant",
|
|
591
591
|
description: "Blog section heading: why now"
|
|
592
592
|
},
|
|
593
593
|
"blog.heading.whatYouGet": {
|
|
594
|
-
value: "
|
|
594
|
+
value: "Ce que vous obtenez",
|
|
595
595
|
description: "Blog section heading: what you get"
|
|
596
596
|
},
|
|
597
597
|
"blog.heading.proofItWorks": {
|
|
598
|
-
value: "
|
|
598
|
+
value: "La preuve que ça marche",
|
|
599
599
|
description: "Blog section heading: proof it works"
|
|
600
600
|
},
|
|
601
601
|
"blog.body.whatYouGet": {
|
|
602
|
-
value: "
|
|
602
|
+
value: "Une pile ciblée conçue pour l'automatisation conforme aux politiques.",
|
|
603
603
|
description: "Blog section body: what you get"
|
|
604
604
|
},
|
|
605
605
|
"blog.body.proofItWorks": {
|
|
606
|
-
value: "
|
|
606
|
+
value: "Les équipes utilisant le modèle rapportent des gains mesurables.",
|
|
607
607
|
description: "Blog section body: proof it works"
|
|
608
608
|
},
|
|
609
609
|
"blog.metric.launchWorkflows": {
|
|
610
|
-
value: "
|
|
610
|
+
value: "Lancez des workflows en quelques minutes",
|
|
611
611
|
description: "Default metric: launch workflows"
|
|
612
612
|
},
|
|
613
613
|
"blog.metric.cutReviewTime": {
|
|
614
|
-
value: "
|
|
614
|
+
value: "Réduisez le temps de revue de 60 %",
|
|
615
615
|
description: "Default metric: cut review time"
|
|
616
616
|
},
|
|
617
617
|
"blog.outro.default": {
|
|
618
|
-
value: "
|
|
618
|
+
value: "Prêt à voir en direct ? Lancez un bac à sable en moins de 5 minutes.",
|
|
619
619
|
description: "Default blog outro / call to action"
|
|
620
620
|
},
|
|
621
621
|
"blog.whyNow": {
|
|
622
|
-
value: "
|
|
622
|
+
value: "Les équipes {audience} sont bloquées par {pains}. {title} fournit des garde-fous sans ralentir les livraisons.",
|
|
623
623
|
description: "Blog why-now section body template",
|
|
624
624
|
placeholders: [
|
|
625
625
|
{ name: "audience", type: "string" },
|
|
@@ -628,78 +628,78 @@ var esMessages = defineTranslation3({
|
|
|
628
628
|
]
|
|
629
629
|
},
|
|
630
630
|
"blog.audience.industry": {
|
|
631
|
-
value: "
|
|
631
|
+
value: " dans le secteur {industry}",
|
|
632
632
|
description: "Audience industry suffix for blog why-now",
|
|
633
633
|
placeholders: [{ name: "industry", type: "string" }]
|
|
634
634
|
},
|
|
635
635
|
"email.subject.announcement.launch": {
|
|
636
|
-
value: "
|
|
636
|
+
value: "Lancement : {title}",
|
|
637
637
|
description: "Announcement email subject variant: launch",
|
|
638
638
|
placeholders: [{ name: "title", type: "string" }]
|
|
639
639
|
},
|
|
640
640
|
"email.subject.announcement.live": {
|
|
641
|
-
value: "{title}
|
|
641
|
+
value: "{title} est en ligne",
|
|
642
642
|
description: "Announcement email subject variant: live",
|
|
643
643
|
placeholders: [{ name: "title", type: "string" }]
|
|
644
644
|
},
|
|
645
645
|
"email.subject.announcement.new": {
|
|
646
|
-
value: "
|
|
646
|
+
value: "Nouveau : {title}",
|
|
647
647
|
description: "Announcement email subject variant: new",
|
|
648
648
|
placeholders: [{ name: "title", type: "string" }]
|
|
649
649
|
},
|
|
650
650
|
"email.subject.onboarding.getStarted": {
|
|
651
|
-
value: "
|
|
651
|
+
value: "Démarrez avec {title}",
|
|
652
652
|
description: "Onboarding email subject variant: get started",
|
|
653
653
|
placeholders: [{ name: "title", type: "string" }]
|
|
654
654
|
},
|
|
655
655
|
"email.subject.onboarding.guide": {
|
|
656
|
-
value: "
|
|
656
|
+
value: "Votre guide {title}",
|
|
657
657
|
description: "Onboarding email subject variant: guide",
|
|
658
658
|
placeholders: [{ name: "title", type: "string" }]
|
|
659
659
|
},
|
|
660
660
|
"email.subject.nurture.speeds": {
|
|
661
|
-
value: "
|
|
661
|
+
value: "Comment {title} accélère les opérations",
|
|
662
662
|
description: "Nurture email subject variant: speeds ops",
|
|
663
663
|
placeholders: [{ name: "title", type: "string" }]
|
|
664
664
|
},
|
|
665
665
|
"email.subject.nurture.proof": {
|
|
666
|
-
value: "
|
|
666
|
+
value: "La preuve que {title} fonctionne",
|
|
667
667
|
description: "Nurture email subject variant: proof",
|
|
668
668
|
placeholders: [{ name: "title", type: "string" }]
|
|
669
669
|
},
|
|
670
670
|
"email.subject.fallback": {
|
|
671
|
-
value: "
|
|
671
|
+
value: "Mise à jour {title}",
|
|
672
672
|
description: "Fallback email subject line",
|
|
673
673
|
placeholders: [{ name: "title", type: "string" }]
|
|
674
674
|
},
|
|
675
675
|
"email.preview.defaultWin": {
|
|
676
|
-
value: "
|
|
676
|
+
value: "livrent plus vite sans lacunes de conformité",
|
|
677
677
|
description: "Default win text for email preview"
|
|
678
678
|
},
|
|
679
679
|
"email.preview.template": {
|
|
680
|
-
value: "
|
|
680
|
+
value: "Découvrez comment les équipes {win}.",
|
|
681
681
|
description: "Email preview text template",
|
|
682
682
|
placeholders: [{ name: "win", type: "string" }]
|
|
683
683
|
},
|
|
684
684
|
"email.body.greeting": {
|
|
685
|
-
value: "
|
|
685
|
+
value: "Bonjour,",
|
|
686
686
|
description: "Email body greeting"
|
|
687
687
|
},
|
|
688
688
|
"email.body.reasons": {
|
|
689
|
-
value: "
|
|
689
|
+
value: "Les principales raisons pour lesquelles les équipes adoptent {title} :",
|
|
690
690
|
description: "Email body reasons intro",
|
|
691
691
|
placeholders: [{ name: "title", type: "string" }]
|
|
692
692
|
},
|
|
693
693
|
"email.cta.sandbox": {
|
|
694
|
-
value: "
|
|
694
|
+
value: "Lancez un bac à sable",
|
|
695
695
|
description: "Default CTA: spin up a sandbox"
|
|
696
696
|
},
|
|
697
697
|
"email.cta.explore": {
|
|
698
|
-
value: "
|
|
698
|
+
value: "Explorez le bac à sable",
|
|
699
699
|
description: "Default CTA: explore the sandbox"
|
|
700
700
|
},
|
|
701
701
|
"email.hook.announcement": {
|
|
702
|
-
value: "{title}
|
|
702
|
+
value: "{title} est en ligne. {summary}",
|
|
703
703
|
description: "Announcement variant hook",
|
|
704
704
|
placeholders: [
|
|
705
705
|
{ name: "title", type: "string" },
|
|
@@ -707,78 +707,78 @@ var esMessages = defineTranslation3({
|
|
|
707
707
|
]
|
|
708
708
|
},
|
|
709
709
|
"email.hook.onboarding": {
|
|
710
|
-
value: "
|
|
710
|
+
value: "Voici votre prochaine étape pour débloquer {title}.",
|
|
711
711
|
description: "Onboarding variant hook",
|
|
712
712
|
placeholders: [{ name: "title", type: "string" }]
|
|
713
713
|
},
|
|
714
714
|
"email.hook.nurture": {
|
|
715
|
-
value: "
|
|
715
|
+
value: "Les opérateurs comme {role} demandent sans cesse comment automatiser les vérifications de conformité. Voici ce qui fonctionne.",
|
|
716
716
|
description: "Nurture variant hook",
|
|
717
717
|
placeholders: [{ name: "role", type: "string" }]
|
|
718
718
|
},
|
|
719
719
|
"landing.eyebrow.defaultIndustry": {
|
|
720
|
-
value: "
|
|
720
|
+
value: "Opérations",
|
|
721
721
|
description: "Default industry for landing page eyebrow"
|
|
722
722
|
},
|
|
723
723
|
"landing.eyebrow.template": {
|
|
724
|
-
value: "
|
|
724
|
+
value: "Équipes {industry}",
|
|
725
725
|
description: "Landing page eyebrow template",
|
|
726
726
|
placeholders: [{ name: "industry", type: "string" }]
|
|
727
727
|
},
|
|
728
728
|
"landing.cta.primary": {
|
|
729
|
-
value: "
|
|
729
|
+
value: "Lancer un bac à sable",
|
|
730
730
|
description: "Landing page primary CTA"
|
|
731
731
|
},
|
|
732
732
|
"landing.cta.secondary": {
|
|
733
|
-
value: "
|
|
733
|
+
value: "Voir la documentation",
|
|
734
734
|
description: "Landing page secondary CTA"
|
|
735
735
|
},
|
|
736
736
|
"landing.highlight.policySafe": {
|
|
737
|
-
value: "Conforme
|
|
737
|
+
value: "Conforme aux politiques par défaut",
|
|
738
738
|
description: "Landing page highlight heading 1"
|
|
739
739
|
},
|
|
740
740
|
"landing.highlight.autoAdapts": {
|
|
741
|
-
value: "
|
|
741
|
+
value: "S'adapte automatiquement par locataire",
|
|
742
742
|
description: "Landing page highlight heading 2"
|
|
743
743
|
},
|
|
744
744
|
"landing.highlight.launchReady": {
|
|
745
|
-
value: "
|
|
745
|
+
value: "Prêt au lancement en quelques jours",
|
|
746
746
|
description: "Landing page highlight heading 3"
|
|
747
747
|
},
|
|
748
748
|
"landing.highlight.fallback": {
|
|
749
|
-
value: "
|
|
749
|
+
value: "Capacité clé",
|
|
750
750
|
description: "Fallback highlight heading"
|
|
751
751
|
},
|
|
752
752
|
"landing.socialProof.heading": {
|
|
753
|
-
value: "
|
|
753
|
+
value: "Équipes utilisant ContractSpec",
|
|
754
754
|
description: "Social proof section heading"
|
|
755
755
|
},
|
|
756
756
|
"landing.socialProof.defaultQuote": {
|
|
757
|
-
value: "«
|
|
757
|
+
value: "« Nous livrons des workflows conformes 5x plus vite tout en réduisant de moitié les tâches opérationnelles. »",
|
|
758
758
|
description: "Default social proof quote"
|
|
759
759
|
},
|
|
760
760
|
"landing.faq.policiesEnforced.heading": {
|
|
761
|
-
value: "
|
|
761
|
+
value: "Comment les politiques restent-elles appliquées ?",
|
|
762
762
|
description: "FAQ heading: policies enforced"
|
|
763
763
|
},
|
|
764
764
|
"landing.faq.policiesEnforced.body": {
|
|
765
|
-
value: "
|
|
765
|
+
value: "Tous les workflows sont compilés à partir de spécifications TypeScript et passent par des vérifications PDP avant exécution, empêchant toute logique non autorisée.",
|
|
766
766
|
description: "FAQ body: policies enforced"
|
|
767
767
|
},
|
|
768
768
|
"landing.faq.existingStack.heading": {
|
|
769
|
-
value: "
|
|
769
|
+
value: "Est-ce compatible avec notre pile existante ?",
|
|
770
770
|
description: "FAQ heading: existing stack"
|
|
771
771
|
},
|
|
772
772
|
"landing.faq.existingStack.body": {
|
|
773
|
-
value: "
|
|
773
|
+
value: "Les adaptateurs se connectent à REST, GraphQL ou MCP. Les intégrations restent agnostiques vis-à-vis des fournisseurs.",
|
|
774
774
|
description: "FAQ body: existing stack"
|
|
775
775
|
},
|
|
776
776
|
"landing.faq.compliance.heading": {
|
|
777
|
-
value: "
|
|
777
|
+
value: "Qu'en est-il des exigences de conformité ?",
|
|
778
778
|
description: "FAQ heading: compliance requirements"
|
|
779
779
|
},
|
|
780
780
|
"social.cta.linkedin": {
|
|
781
|
-
value: "
|
|
781
|
+
value: "Réservez une démo de 15 min",
|
|
782
782
|
description: "LinkedIn post default CTA"
|
|
783
783
|
},
|
|
784
784
|
"social.cta.twitter": {
|
|
@@ -786,7 +786,7 @@ var esMessages = defineTranslation3({
|
|
|
786
786
|
description: "Twitter post default CTA"
|
|
787
787
|
},
|
|
788
788
|
"social.body.threads": {
|
|
789
|
-
value: "Ops +
|
|
789
|
+
value: "Ops + conformité peuvent avancer vite. {title} automatise les garde-fous pour que les équipes livrent quotidiennement.",
|
|
790
790
|
description: "Threads post body template",
|
|
791
791
|
placeholders: [{ name: "title", type: "string" }]
|
|
792
792
|
},
|
|
@@ -800,7 +800,7 @@ var esMessages = defineTranslation3({
|
|
|
800
800
|
placeholders: [{ name: "title", type: "string" }]
|
|
801
801
|
},
|
|
802
802
|
"seo.metaDescription": {
|
|
803
|
-
value: "{summary} —
|
|
803
|
+
value: "{summary} — conçu pour {role}{industry}.",
|
|
804
804
|
description: "SEO meta description template",
|
|
805
805
|
placeholders: [
|
|
806
806
|
{ name: "summary", type: "string" },
|
|
@@ -809,37 +809,17 @@ var esMessages = defineTranslation3({
|
|
|
809
809
|
]
|
|
810
810
|
},
|
|
811
811
|
"seo.offer.default": {
|
|
812
|
-
value: "
|
|
812
|
+
value: "Commencez à construire avec ContractSpec",
|
|
813
813
|
description: "Default offer description for schema markup"
|
|
814
814
|
},
|
|
815
815
|
"seo.audience.industry": {
|
|
816
|
-
value: "
|
|
816
|
+
value: " dans le secteur {industry}",
|
|
817
817
|
description: "Audience industry suffix for SEO description",
|
|
818
818
|
placeholders: [{ name: "industry", type: "string" }]
|
|
819
819
|
}
|
|
820
820
|
}
|
|
821
821
|
});
|
|
822
822
|
|
|
823
|
-
// src/i18n/messages.ts
|
|
824
|
-
import {
|
|
825
|
-
createI18nFactory
|
|
826
|
-
} from "@contractspec/lib.contracts-spec/translations";
|
|
827
|
-
var factory = createI18nFactory({
|
|
828
|
-
specKey: "content-gen.messages",
|
|
829
|
-
catalogs: [enMessages, frMessages, esMessages]
|
|
830
|
-
});
|
|
831
|
-
var createContentGenI18n = factory.create;
|
|
832
|
-
var getDefaultI18n = factory.getDefault;
|
|
833
|
-
var resetI18nRegistry = factory.resetRegistry;
|
|
834
|
-
|
|
835
|
-
// src/i18n/locale.ts
|
|
836
|
-
import {
|
|
837
|
-
DEFAULT_LOCALE,
|
|
838
|
-
SUPPORTED_LOCALES,
|
|
839
|
-
resolveLocale,
|
|
840
|
-
isSupportedLocale
|
|
841
|
-
} from "@contractspec/lib.contracts-spec/translations";
|
|
842
|
-
|
|
843
823
|
// src/i18n/keys.ts
|
|
844
824
|
var PROMPT_KEYS = {
|
|
845
825
|
"prompt.blog.system": "prompt.blog.system",
|
|
@@ -916,6 +896,26 @@ var I18N_KEYS = {
|
|
|
916
896
|
...SOCIAL_KEYS,
|
|
917
897
|
...SEO_KEYS
|
|
918
898
|
};
|
|
899
|
+
|
|
900
|
+
// src/i18n/locale.ts
|
|
901
|
+
import {
|
|
902
|
+
DEFAULT_LOCALE,
|
|
903
|
+
isSupportedLocale,
|
|
904
|
+
resolveLocale,
|
|
905
|
+
SUPPORTED_LOCALES
|
|
906
|
+
} from "@contractspec/lib.contracts-spec/translations";
|
|
907
|
+
|
|
908
|
+
// src/i18n/messages.ts
|
|
909
|
+
import {
|
|
910
|
+
createI18nFactory
|
|
911
|
+
} from "@contractspec/lib.contracts-spec/translations";
|
|
912
|
+
var factory = createI18nFactory({
|
|
913
|
+
specKey: "content-gen.messages",
|
|
914
|
+
catalogs: [enMessages, frMessages, esMessages]
|
|
915
|
+
});
|
|
916
|
+
var createContentGenI18n = factory.create;
|
|
917
|
+
var getDefaultI18n = factory.getDefault;
|
|
918
|
+
var resetI18nRegistry = factory.resetRegistry;
|
|
919
919
|
// src/seo/optimizer.ts
|
|
920
920
|
class SeoOptimizer {
|
|
921
921
|
i18n;
|