Ir al contenido

cards2pack

cards2pack es una herramienta CLI que convierte archivos JSON de Adaptive Card en packs de Greentic. Hace lo siguiente:

  • Escanea cards, construye un grafo de dependencias y genera flows .ygtc
  • Extrae cadenas traducibles para i18n
  • Traduce automáticamente cards mediante greentic-i18n-translator
  • Empaqueta todo en un .gtpack listo para desplegar
Ventana de terminal
cargo install greentic-cards2pack

Herramientas requeridas:

Ventana de terminal
cargo install greentic-flow greentic-pack
cargo install greentic-i18n-translator # optional, for --auto-translate
  1. Crear Adaptive Cards

    cards/welcome.json
    {
    "type": "AdaptiveCard",
    "version": "1.4",
    "body": [
    { "type": "TextBlock", "text": "Welcome!", "size": "Large" },
    { "type": "TextBlock", "text": "How can I help you today?" }
    ],
    "actions": [
    {
    "type": "Action.Submit",
    "title": "Get Started",
    "data": { "flow": "demo", "step": "next-card" }
    }
    ]
    }
  2. Generar el pack

    Ventana de terminal
    greentic-cards2pack generate \
    --cards ./cards \
    --out ./my-pack \
    --name my-pack
  3. Salida

    my-pack/
    pack.yaml
    flows/main.ygtc
    assets/cards/welcome.json
    dist/my-pack.gtpack
    .cards2pack/manifest.json

Comando principal: escanea cards, genera flows y construye el pack.

Ventana de terminal
greentic-cards2pack generate [OPTIONS]
FlagDescripción
--cards <DIR>Directorio con archivos JSON de Adaptive Card (requerido)
--out <DIR>Directorio de workspace de salida (requerido)
--name <NAME>Nombre del pack (requerido)
--strictProduce errores por destinos faltantes, duplicados o JSON no válido
--group-by <MODE>Agrupación de flows: folder o flow-field
--default-flow <NAME>Nombre del flow por defecto para cards sin agrupar
--promptHabilita enrutamiento basado en prompt (agrega nodo prompt2flow)
--prompt-json <FILE>JSON de respuestas para enrutamiento por prompt (requiere --prompt)
--auto-translateTraduce cards automáticamente con hasta 8 hilos en paralelo (requiere greentic-i18n-translator)
--langs <CODES>Códigos de idioma separados por comas; si se omite, traduce a los más de 65 locales compatibles
--glossary <FILE>JSON de glosario para traducciones consistentes
--verboseImprime salida detallada

Extrae cadenas traducibles de las cards en un bundle JSON.

Ventana de terminal
greentic-cards2pack extract-i18n [OPTIONS]
FlagDescripción
--input <DIR>Directorio de archivos JSON de cards (requerido)
--output <FILE>Ruta del JSON de salida (por defecto: i18n/en.json)
--prefix <PREFIX>Prefijo de clave (por defecto: card)
--include-existingIncluye cadenas que ya contienen patrones $t()
--verboseImprime el informe de extracción

Las cards se identifican por (en orden de prioridad):

  1. El campo greentic.cardId en el JSON de la card
  2. El nombre base del archivo (por ejemplo, welcome.jsonwelcome)

Las cards se agrupan en flows por:

  • El campo flow en los datos de la acción
  • --group-by folder (estructura de directorios)
  • El fallback --default-flow
Ventana de terminal
greentic-cards2pack extract-i18n \
--input ./cards \
--output i18n/en.json \
--verbose

Salida:

i18n/en.json
{
"card.welcome.body_0.text": "Welcome!",
"card.welcome.body_1.text": "How can I help you today?",
"card.welcome.actions_0.title": "Get Started"
}
CampoOrigen
textContenido de TextBlock
titleTítulos de acciones, títulos de cards y títulos de toggles
labelEtiquetas de inputs
placeholderPlaceholders de inputs
errorMessageErrores de validación
altTextTexto alternativo de imágenes
fallbackTextContenido fallback
FactSet title/valueEntradas de facts
ChoiceSet titleOpciones de choice
Ventana de terminal
greentic-cards2pack generate \
--cards ./cards \
--out ./my-pack \
--name my-pack \
--auto-translate \
--langs fr,de

Esto extrae cadenas de los archivos originales de cards, las traduce mediante greentic-i18n-translator usando hasta 8 hilos concurrentes y empaqueta todo:

my-pack/assets/i18n/
en.json # English (source)
fr.json # French
de.json # German

Usa un glosario para mantener consistentes los nombres de marca y términos técnicos:

glossary.json
{
"Greentic": "Greentic",
"Dashboard": "Dashboard"
}
Ventana de terminal
greentic-cards2pack generate \
--cards ./cards --out ./pack --name demo \
--auto-translate --langs fr,de \
--glossary glossary.json

Las secciones de flow generadas se envuelven en marcadores:

# BEGIN GENERATED (cards2pack)
# ... generated nodes ...
# END GENERATED (cards2pack)
# Developer space below (preserved on regen)

El contenido fuera de los marcadores se conserva cuando regeneras.

Con --strict:

  • Los destinos de ruta faltantes producen errores (en lugar de nodos stub)
  • Los valores duplicados de cardId producen errores
  • El JSON no válido produce errores

Usa sintaxis Handlebars para contenido dinámico:

{
"type": "TextBlock",
"text": "Hello, {{name}}!"
}

Ejemplo: Formulario de varios pasos con traducción

Sección titulada «Ejemplo: Formulario de varios pasos con traducción»
Ventana de terminal
# Create cards in cards/ directory, then:
greentic-cards2pack generate \
--cards ./cards \
--out ./checkout-pack \
--name checkout \
--auto-translate \
--langs fr,ja,es \
--glossary glossary.json \
--strict

Consulta el ejemplo translate-demo para ver un recorrido completo.