Lewati ke konten

cards2pack

cards2pack adalah alat CLI yang mengubah file JSON Adaptive Card menjadi pack Greentic. Alat ini:

  • Memindai card, membangun grafik dependensi, menghasilkan flow .ygtc
  • Mengekstrak string yang dapat diterjemahkan untuk i18n
  • Menerjemahkan card secara otomatis via greentic-i18n-translator
  • Mengemas semuanya menjadi .gtpack yang siap di-deploy
Terminal window
cargo install greentic-cards2pack

Alat yang dibutuhkan:

Terminal window
cargo install greentic-flow greentic-pack
cargo install greentic-i18n-translator # optional, for --auto-translate
  1. Buat 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. Hasilkan pack

    Terminal window
    greentic-cards2pack generate \
    --cards ./cards \
    --out ./my-pack \
    --name my-pack
  3. Hasil

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

Perintah utama, memindai card, menghasilkan flow, dan membangun pack.

Terminal window
greentic-cards2pack generate [OPTIONS]
FlagDeskripsi
--cards <DIR>Direktori file JSON Adaptive Card (wajib)
--out <DIR>Direktori workspace output (wajib)
--name <NAME>Nama pack (wajib)
--strictError saat target hilang, duplikat, atau JSON tidak valid
--group-by <MODE>Pengelompokan flow: folder atau flow-field
--default-flow <NAME>Nama flow default untuk card yang tidak dikelompokkan
--promptAktifkan routing berbasis prompt (menambahkan node prompt2flow)
--prompt-json <FILE>JSON jawaban untuk routing prompt (memerlukan --prompt)
--auto-translateTerjemahkan card otomatis dengan hingga 8 thread paralel (memerlukan greentic-i18n-translator)
--langs <CODES>Kode bahasa dipisahkan koma; kosongkan untuk menerjemahkan ke semua 65+ locale yang didukung
--glossary <FILE>Glossary JSON untuk terjemahan yang konsisten
--verboseCetak output terperinci

Ekstrak string yang dapat diterjemahkan dari card ke dalam bundle JSON.

Terminal window
greentic-cards2pack extract-i18n [OPTIONS]
FlagDeskripsi
--input <DIR>Direktori file JSON card (wajib)
--output <FILE>Path JSON output (default: i18n/en.json)
--prefix <PREFIX>Prefiks key (default: card)
--include-existingSertakan string yang sudah mengandung pola $t()
--verboseCetak laporan ekstraksi

Card diidentifikasi berdasarkan (urutan prioritas):

  1. Field greentic.cardId di JSON card
  2. Stem nama file (misalnya, welcome.jsonwelcome)

Card dikelompokkan ke dalam flow berdasarkan:

  • Field flow di action data
  • --group-by folder (struktur direktori)
  • Fallback --default-flow
Terminal window
greentic-cards2pack extract-i18n \
--input ./cards \
--output i18n/en.json \
--verbose

Hasil:

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"
}
FieldSumber
textKonten TextBlock
titleJudul action, judul card, judul toggle
labelLabel input
placeholderPlaceholder input
errorMessageError validasi
altTextAlt text gambar
fallbackTextKonten fallback
FactSet title/valueEntri fakta
ChoiceSet titleOpsi pilihan
Terminal window
greentic-cards2pack generate \
--cards ./cards \
--out ./my-pack \
--name my-pack \
--auto-translate \
--langs fr,de

Perintah ini mengekstrak string dari file card asli, menerjemahkannya via greentic-i18n-translator menggunakan hingga 8 thread konkuren, lalu membundel semuanya:

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

Gunakan glossary untuk menjaga nama brand dan istilah teknis tetap konsisten:

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

Bagian flow yang dihasilkan dibungkus dalam marker:

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

Konten di luar marker akan dipertahankan saat Anda melakukan generate ulang.

Dengan --strict:

  • Target route yang hilang menyebabkan error (bukan node stub)
  • Nilai cardId yang duplikat menyebabkan error
  • JSON yang tidak valid menyebabkan error

Gunakan sintaks Handlebars untuk konten dinamis:

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

Contoh: Form Multi-Langkah dengan Terjemahan

Section titled “Contoh: Form Multi-Langkah dengan Terjemahan”
Terminal window
# 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

Lihat contoh translate-demo untuk walkthrough lengkap.