Перекладні Enums

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
Enum-типи — чудове доповнення до PHP і Laravel, яке полегшує підтримку та робить код більш зрозумілим. Дізнайтеся, як пакет Laravel Enum Translatable автоматично перекладає значення enum-типів, перетворює їх на масиви для API та легко інтегрується з Eloquent.

Enums — відмінне доповнення для PHP і Laravel. Вони покращують читабельність коду й полегшують його підтримку. Якщо ви робите багатомовний додаток, також потрібно перекладати значення Enum. Для цього існує пакет Laravel Enum Translatable від Osama Sadah.

Основні можливості

Приклад

Додайте trait EnumTranslatable до свого класу Enum.

namespace App\Enums\Article;
 
use Osama\LaravelEnums\Concerns\EnumTranslatable;
 
enum ArticleStatus: string
{
    use EnumTranslatable;
 
    case DRAFT = 'draft';
    case PUBLISHED = 'published';
    case REJECTED = 'rejected';
}

Створіть файли перекладів у директорії lang вашого Laravel‑додатка. Ключ для перекладу генерується автоматично від імені класу Enum.

Наприклад, у lang/en/enums.php може бути:

return [
    'article_statuses' => [
        'draft' => 'Draft',
        'published' => 'Published',
        'rejected' => 'Rejected',
    ],
];

А у lang/es/enums.php:

return [
    'article_statuses' => [
        'draft' => 'Borrador',
        'published' => 'Publicado',
        'rejected' => 'Rechazado',
    ],
];

Щоб отримати переклад значення Enum, використайте методи trans() або allTrans():

$status = ArticleStatus::DRAFT;
 
// Get translation in current locale
$translated = $status->trans();
 
// Get translation in specific locale
$english = $status->trans('en'); // Outputs: Draft
$spanish = $status->trans('es'); // Outputs: Borrador
 
// or All translations
$allTranslations = $status->allTrans(); // Outputs: ['en' => 'Draft', 'es' => 'Borrador']

Пакет також дозволяє автоматично кастити транслювані Enum у ваших Eloquent‑моделях:

namespace App\Models;
 
use App\Enums\Article\ArticleStatus;
use Illuminate\Database\Eloquent\Model;
 
class Article extends Model
{
    //...
 
    protected function casts(): array
    {
        return [
            'status' => ArticleStatus::class,
        ];
    }
}

Дізнатись більше про пакет і переглянути код на GitHub.