PHP code example of osama-98 / laravel-enum-translatable

1. Go to this page and download the library: Download osama-98/laravel-enum-translatable library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

osama-98 / laravel-enum-translatable example snippets


enum OrderStatusEnum: string
{
    use EnumTranslatable;

    case PENDING   = 'pending';
    case SHIPPED   = 'shipped';
    case DELIVERED = 'delivered';
}

return [
    'order_statuses' => [
        'pending'   => 'Pending',
        'shipped'   => 'Shipped',
        'delivered' => 'Delivered',
    ],
];

OrderStatusEnum::PENDING->trans();      // 'Pending'
OrderStatusEnum::PENDING->trans('ar');  // 'قيد الانتظار'
OrderStatusEnum::toArrayTrans();        // [['value' => 'pending', 'name' => 'Pending'], ...]

// config/laravel-enums.php

return [

    /*
    |--------------------------------------------------------------------------
    | Supported Locales
    |--------------------------------------------------------------------------
    | The locales that allTrans() will return translations for.
    */
    'supported_locales' => ['en'],

    /*
    |--------------------------------------------------------------------------
    | Modular Support
    |--------------------------------------------------------------------------
    | Enable this if you use a module system such as nWidart/laravel-modules.
    | Translations will be loaded from each module's namespace automatically.
    */
    'modular_enabled' => false,

    /*
    |--------------------------------------------------------------------------
    | Namespace Resolver
    |--------------------------------------------------------------------------
    | The class responsible for resolving a module's translation namespace.
    | Extend TranslationNamespaceResolver to customise the resolution logic.
    */
    'namespace_resolver' => \Osama\LaravelEnums\TranslationNamespaceResolver::class,

];



namespace App\Enums;

use Osama\LaravelEnums\Concerns\EnumTranslatable;

enum CourseStatusEnum: string
{
    use EnumTranslatable;

    case DRAFT     = 'draft';
    case PENDING   = 'pending';
    case PUBLISHED = 'published';
}

// lang/en/enums.php
return [
    'course_statuses' => [
        'draft'                => 'Draft',
        'draft_description'    => ':name is currently in draft mode.',
        'pending'              => 'Pending',
        'pending_description'  => ':name is currently pending review.',
        'published'            => 'Published',
        'published_description' => 'Your post has been published.',
    ],
];

// lang/ar/enums.php
return [
    'course_statuses' => [
        'draft'                => 'مسودة',
        'draft_description'    => ':name في وضع المسودة حاليًا.',
        'pending'              => 'قيد المراجعة',
        'pending_description'  => ':name قيد المراجعة حاليًا.',
        'published'            => 'منشور',
        'published_description' => 'تم نشر المنشور.',
    ],
];

$status = CourseStatusEnum::DRAFT;

$status->trans();     // 'Draft'   (current application locale)
$status->trans('ar'); // 'مسودة'
$status->trans('en'); // 'Draft'

CourseStatusEnum::PUBLISHED->trans(context: 'description');
// 'Your post has been published.'

CourseStatusEnum::DRAFT->trans(context: 'description', replace: ['name' => 'Course A']);
// 'Course A is currently in draft mode.'

CourseStatusEnum::DRAFT->allTrans();
// ['en' => 'Draft', 'ar' => 'مسودة']

CourseStatusEnum::toArrayTrans();     // current locale
CourseStatusEnum::toArrayTrans('ar'); // Arabic
CourseStatusEnum::toArrayTrans('en'); // English

// [
//     ['value' => 'draft',     'name' => 'Draft'],
//     ['value' => 'pending',   'name' => 'Pending'],
//     ['value' => 'published', 'name' => 'Published'],
// ]

CourseStatusEnum::toTransCollection('ar');

// Collection([
//     ['value' => 'draft',     'name' => 'مسودة'],
//     ['value' => 'pending',   'name' => 'قيد المراجعة'],
//     ['value' => 'published', 'name' => 'منشور'],
// ])

CourseStatusEnum::DRAFT->object();
// ['value' => 'draft', 'name' => 'Draft']

CourseStatusEnum::DRAFT->transKey();
// 'enums.course_statuses.draft'

CourseStatusEnum::getTransKey();
// 'enums.course_statuses'

CourseStatusEnum::names();   // ['DRAFT', 'PENDING', 'PUBLISHED']
CourseStatusEnum::values();  // ['draft', 'pending', 'published']
CourseStatusEnum::toArray(); // ['draft' => 'DRAFT', 'pending' => 'PENDING', 'published' => 'PUBLISHED']

CourseStatusEnum::toCollection();
// Collection(['draft' => 'DRAFT', 'pending' => 'PENDING', 'published' => 'PUBLISHED'])

CourseStatusEnum::toCollection()->keys();   // ['draft', 'pending', 'published']
CourseStatusEnum::toCollection()->values(); // ['DRAFT', 'PENDING', 'PUBLISHED']

CourseStatusEnum::only(['draft', 'pending']);
// [CourseStatusEnum::DRAFT, CourseStatusEnum::PENDING]

CourseStatusEnum::except([CourseStatusEnum::PUBLISHED]);
// [CourseStatusEnum::DRAFT, CourseStatusEnum::PENDING]

CourseStatusEnum::randomCase();  // e.g. CourseStatusEnum::PENDING
CourseStatusEnum::randomValue(); // e.g. 'pending'

CourseStatusEnum::randomCase(except: CourseStatusEnum::DRAFT);
CourseStatusEnum::randomValue(except: ['draft', 'pending']); // always returns 'published'

CourseStatusEnum::matching('*ed');    // [PUBLISHED]
CourseStatusEnum::notMatching('*ed'); // [DRAFT]

CourseStatusEnum::startsWith('p');  // [PENDING, PUBLISHED]
CourseStatusEnum::endsWith('ed');   // [PUBLISHED]
CourseStatusEnum::contains('ish');  // [PUBLISHED]

CourseStatusEnum::wrap('draft');                  // CourseStatusEnum::DRAFT
CourseStatusEnum::wrap(CourseStatusEnum::DRAFT);  // CourseStatusEnum::DRAFT
CourseStatusEnum::wrap(OtherEnum::DRAFT);         // CourseStatusEnum::DRAFT (matched by value)
CourseStatusEnum::wrap(null);                     // null
CourseStatusEnum::wrap('0');                      // the case backed by '0', if any
CourseStatusEnum::wrap('invalid', strict: false); // null

$status = CourseStatusEnum::DRAFT;

$status->is('draft');                        // true
$status->is(CourseStatusEnum::DRAFT);        // true
$status->isNot(CourseStatusEnum::PUBLISHED); // true

$status->isAny(['draft', 'pending']);                                        // true
$status->isAny([CourseStatusEnum::PUBLISHED]);                               // false
$status->isNotAny([CourseStatusEnum::PENDING, CourseStatusEnum::PUBLISHED]); // true

protected function casts(): array
{
    return [
        'status' => CourseStatusEnum::class,
    ];
}

public function toArray(Request $request): array
{
    return [
        'id'     => $this->id,
        'title'  => $this->title,
        'status' => $this->status->object(),
        // ['value' => 'draft', 'name' => 'Draft']
    ];
}

public function create(): JsonResponse
{
    return response()->json([
        'statuses' => CourseStatusEnum::toArrayTrans(),
    ]);
}
bash
php artisan make:enum OrderStatus
bash
php artisan vendor:publish --tag="laravel-enums-config"
bash
php artisan make:enum Admin/UserStatus
# Generates: app/Enums/Admin/UserStatusEnum.php
# Namespace:  App\Enums\Admin

lang/
├── en/
│   └── enums.php
└── ar/
    └── enums.php