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-resolvedForcing 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-detectionReading resolved copy
$step->resolvedTitle(); // "Upload a profile photo"
$step->resolvedCta(); // "Upload now"
$step->title; // "onboarding.photo.title" — the raw key stays on the propertytoData(), 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 cryptoBy 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.