NewWe open-sourced 50+ Laravel packages
Custom AI apps, agents and automation — Roundly ConsultingRoundly
All packages
Onboarding for Laravel

Localizable copy

title() and cta() can hold translation keys. By default a value that looks like a key — it contains a . or :: — and exists in your translations is resolved with __() at read time. Anything else passes through verbatim, so plain titles are never mangled:

// lang/en/onboarding.php
return [
    'photo' => [
        'title' => 'Upload a profile photo',
        'cta' => 'Upload now',
    ],
];
Step::make('onboarding.photo.title')->cta('onboarding.photo.cta');   // auto-resolved

Forcing the behaviour

Step::make('onboarding.forced')->translatable();       // always resolve
Step::make('keep.this.literal')->translatable(false);  // always raw
Step::make('onboarding.photo.title')->translatable(null); // back to auto-detection

Reading resolved copy

$step->resolvedTitle();   // "Upload a profile photo"
$step->resolvedCta();     // "Upload now"
$step->title;             // "onboarding.photo.title" — the raw key stays on the property

toData(), toArray() and onboarding:list all show the resolved copy. The package ships no translations of its own — it only resolves your keys, in the current locale, when the flow is read.

Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

More ways to support, including crypto

By donating, you agree to our donation terms.

Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.