relationship('category', 'name->es')` builds the list fine — that path * goes through a query — but to validate a choice Filament reads the title * back off the record as a property, `$record->{'name->es'}`, which does not * exist. Every choice then came back without a label and was refused as "not * in the list of allowed values", whichever one it was. Given this, Filament * asks the record instead, in the language of whoever is using the panel. * * The JSON path stays in `relationship()`: it is still what the search box * queries and the list is ordered by. */ final class TranslatedOptionLabel { public static function using(string $attribute): Closure { return fn (Model $record): ?string => $record->getTranslation($attribute, app()->getLocale()); } }