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