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