Enums — відмінне доповнення для PHP і Laravel. Вони покращують читабельність коду й полегшують його підтримку. Якщо ви робите багатомовний додаток, також потрібно перекладати значення Enum. Для цього існує пакет Laravel Enum Translatable від Osama Sadah.
Основні можливості
- Підтримка перекладів: Автоматично перекладає значення Enum через систему перекладів Laravel
- Перетворення в масив: Конвертує Enum у масиви з value і name для зручних API‑відповідей
- Повернення як об'єкт: Дає Enum як об'єкт з value і перекладеним name
- Кілька локалей: Працює з методами
trans()таallTrans() - Проста інтеграція: Реалізація через trait
- Підтримка модульності: Опційна сумісність з модульними Laravel‑додатками
Приклад
Додайте 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.