PHPackages                             fnx-software/filament-astrotomic - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. fnx-software/filament-astrotomic

ActiveLibrary[Localization &amp; i18n](/categories/localization)

fnx-software/filament-astrotomic
================================

Filament support for Astrotomic's Laravel Translatable package.

v2.0.0(2mo ago)3131↓50%1MITPHPPHP ^8.2|^8.3|^8.4CI passing

Since Sep 29Pushed 1mo agoCompare

[ Source](https://github.com/fnx-software/filament-astrotomic)[ Packagist](https://packagist.org/packages/fnx-software/filament-astrotomic)[ Docs](https://github.com/fnx-software/filament-astrotomic)[ RSS](/packages/fnx-software-filament-astrotomic/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (12)Versions (14)Used By (0)

Filament Astrotomic Translations
================================

[](#filament-astrotomic-translations)

[![Total Downloads](https://camo.githubusercontent.com/141ee420133c2c29e31b9cd3ff3c8d83f061d2fd441b7044de1c09e4af71ca4b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666e782d736f6674776172652f66696c616d656e742d617374726f746f6d6963)](https://packagist.org/packages/fnx-software/filament-astrotomic)

This package is an extension for **Filament v5** and [laravel-translatable](https://docs.astrotomic.info/laravel-translatable) to easily manage multilingual content in your admin panel.

For **Filament v4**, use an older compatible release/tag.

This is an enhanced fork of [doriiaan/filament-astrotomic](https://github.com/Doriiaan/filament-astrotomic) and the original [cactus-galaxy/filament-astrotomic](https://github.com/CactusGalaxy/FilamentAstrotomic), updated for Filament 5 and introducing powerful new features like a reactive `LocaleSwitcher` and dedicated components for displaying translated content.

[![CleanShot 2025-09-29 at 12 02 44@2x](https://private-user-images.githubusercontent.com/47450090/495086537-a2ef2b14-db7b-4d99-8fc9-dd30ed81a4a7.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0NTE5OTIsIm5iZiI6MTc3NTQ1MTY5MiwicGF0aCI6Ii80NzQ1MDA5MC80OTUwODY1MzctYTJlZjJiMTQtZGI3Yi00ZDk5LThmYzktZGQzMGVkODFhNGE3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDA2VDA1MDEzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE1MmIwOGM2MjQ4MmY2YzY4MDMzNWFlZjVmZTcyY2E4MzYzMjljZWYxOWVmMjc4MzAwN2RkYTMyM2IwYjAwMWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.-W-y7xxW8lfGDF1CYDD_q42GK97HCoT1R3az-gr7Azg)](https://private-user-images.githubusercontent.com/47450090/495086537-a2ef2b14-db7b-4d99-8fc9-dd30ed81a4a7.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0NTE5OTIsIm5iZiI6MTc3NTQ1MTY5MiwicGF0aCI6Ii80NzQ1MDA5MC80OTUwODY1MzctYTJlZjJiMTQtZGI3Yi00ZDk5LThmYzktZGQzMGVkODFhNGE3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDA2VDA1MDEzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE1MmIwOGM2MjQ4MmY2YzY4MDMzNWFlZjVmZTcyY2E4MzYzMjljZWYxOWVmMjc4MzAwN2RkYTMyM2IwYjAwMWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.-W-y7xxW8lfGDF1CYDD_q42GK97HCoT1R3az-gr7Azg)Installation
------------

[](#installation)

You can install the package via Composer:

```
composer require fnx-software/filament-astrotomic
```

Publish the configuration for `astrotomic/laravel-translatable`:

```
php artisan vendor:publish --tag="translatable"
```

Configure the locales your app should use in `config/translatable.php`:

```
// config/translatable.php
'locales' => [
    'en',
    'es',
    'fr',
],
```

Setup
-----

[](#setup)

### Adding the Plugin to a Panel

[](#adding-the-plugin-to-a-panel)

Register the plugin in your Panel Provider:

```
// app/Providers/Filament/AdminPanelProvider.php
use Fnxsoftware\FilamentAstrotomic\FilamentAstrotomicPlugin;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugins([
            FilamentAstrotomicPlugin::make(),
        ]);
}
```

### Customizing the Main Locale (Optional)

[](#customizing-the-main-locale-optional)

By default, the main locale is taken from your `config/translatable.php` file. You can override this dynamically when registering the plugin.

**Set a static main locale:**

```
FilamentAstrotomicPlugin::make()
    ->mainLocale('ar')
```

**Set a dynamic main locale (e.g., from database settings):**

```
use App\Models\Setting;

FilamentAstrotomicPlugin::make()
    ->mainLocale(fn () => Setting::where('key', 'default_locale')->first()?->value ?? 'en')
```

### Customizing the Available Locales (Optional)

[](#customizing-the-available-locales-optional)

By default, the available locales are loaded from your `config/translatable.php` file.

You can override the locale list when registering the plugin, which is useful when your locales are stored in the database (e.g., per-tenant settings).

**Set a static locales list:**

```
FilamentAstrotomicPlugin::make()
    ->locales(['ar', 'en', 'fr'])
```

Basic Usage
-----------

[](#basic-usage)

### 1. Preparing Your Model

[](#1-preparing-your-model)

Make your Eloquent model translatable as described in the [laravel-translatable documentation](https://docs.astrotomic.info/laravel-translatable/installation#models).

```
// app/Models/Post.php
use Illuminate\Database\Eloquent\Model;
use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract;
use Astrotomic\Translatable\Translatable;

class Post extends Model implements TranslatableContract
{
    use Translatable;

    public array $translatedAttributes = ['title', 'content'];
    protected $fillable = ['author_id'];
}
```

### 2. Preparing Your Resource

[](#2-preparing-your-resource)

Apply the `ResourceTranslatable` trait to your Filament resource class:

```
// app/Filament/Resources/PostResource.php
use Fnxsoftware\FilamentAstrotomic\Resources\Concerns\ResourceTranslatable;
use Filament\Resources\Resource;

class PostResource extends Resource
{
    use ResourceTranslatable;

    // ...
}
```

### 3. Making Resource Pages Translatable

[](#3-making-resource-pages-translatable)

You must also apply the corresponding translatable trait to each of your resource's pages.

**List Page:**

```
// app/Filament/Resources/PostResource/Pages/ListPosts.php
use Fnxsoftware\FilamentAstrotomic\Resources\Pages\ListTranslatable;
use Filament\Resources\Pages\ListRecords;

class ListPosts extends ListRecords
{
    use ListTranslatable;
    // ...
}
```

**Create Page:**

```
// app/Filament/Resources/PostResource/Pages/CreatePost.php
use Fnxsoftware\FilamentAstrotomic\Resources\Pages\CreateTranslatable;
use Filament\Resources\Pages\CreateRecord;

class CreatePost extends CreateRecord
{
    use CreateTranslatable;
    // ...
}
```

**Edit Page:**

```
// app/Filament/Resources/PostResource/Pages/EditPost.php
use Fnxsoftware\FilamentAstrotomic\Resources\Pages\EditTranslatable;
use Filament\Resources\Pages\EditRecord;

class EditPost extends EditRecord
{
    use EditTranslatable;
    // ...
}
```

**View Page:**

```
// app/Filament/Resources/PostResource/Pages/ViewPost.php
use Fnxsoftware\FilamentAstrotomic\Resources\Pages\ViewTranslatable;
use Filament\Resources\Pages\ViewRecord;

class ViewPost extends ViewRecord
{
    use ViewTranslatable;
    // ...
}
```

Form Components
---------------

[](#form-components)

### `TranslatableTabs` for Localized Fields

[](#translatabletabs-for-localized-fields)

To manage translations for your model's attributes, use the `TranslatableTabs` component. It automatically creates a tab for each locale.

```
use Fnxsoftware\FilamentAstrotomic\Schemas\Components\TranslatableTabs;
use Fnxsoftware\FilamentAstrotomic\TranslatableTab;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\RichEditor;
use Filament\Forms\Form;

public static function form(Form $form): Form
{
    return $form->schema([
        TranslatableTabs::make()
            ->localeTabSchema(fn (TranslatableTab $tab) => [
                TextInput::make($tab->makeName('title'))
                    ->required($tab->isMainLocale()), // Required only for the main language

                RichEditor::make($tab->makeName('content')),
            ])
    ]);
}
```

[![CleanShot 2025-09-29 at 12 03 33@2x](https://private-user-images.githubusercontent.com/47450090/495086821-15c1f035-4997-476f-b249-16da8c007e48.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0NTE5OTIsIm5iZiI6MTc3NTQ1MTY5MiwicGF0aCI6Ii80NzQ1MDA5MC80OTUwODY4MjEtMTVjMWYwMzUtNDk5Ny00NzZmLWIyNDktMTZkYThjMDA3ZTQ4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDA2VDA1MDEzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYzY2EwMTgyOGIwMTlhY2JiNWZmYTRkZWM1YWYyZjU0MGUyZWM4MzBjNDc1YjY0OTk3OWE0MGVlZWI3NTkxODEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DqyGyZBqNU43bQtcR7_BSWNVmcxqRCfCXYNp6P7A11E)](https://private-user-images.githubusercontent.com/47450090/495086821-15c1f035-4997-476f-b249-16da8c007e48.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0NTE5OTIsIm5iZiI6MTc3NTQ1MTY5MiwicGF0aCI6Ii80NzQ1MDA5MC80OTUwODY4MjEtMTVjMWYwMzUtNDk5Ny00NzZmLWIyNDktMTZkYThjMDA3ZTQ4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDA2VDA1MDEzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYzY2EwMTgyOGIwMTlhY2JiNWZmYTRkZWM1YWYyZjU0MGUyZWM4MzBjNDc1YjY0OTk3OWE0MGVlZWI3NTkxODEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DqyGyZBqNU43bQtcR7_BSWNVmcxqRCfCXYNp6P7A11E)#### Customizing Field Labels

[](#customizing-field-labels)

To make it clearer which language a field belongs to, you can use the `makePrefixLabel()` and `makeSuffixLabel()` methods on the `TranslatableTab` object to automatically add the locale name to your field labels.

```
use Fnxsoftware\FilamentAstrotomic\Schemas\Components\TranslatableTabs;
use Fnxsoftware\FilamentAstrotomic\TranslatableTab;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;

TranslatableTabs::make()
    ->localeTabSchema(fn (TranslatableTab $tab) => [
        TextInput::make($tab->makeName('title'))
            // Renders label as "Title (English)"
            ->label($tab->makePrefixLabel('Title')),

        Textarea::make($tab->makeName('description'))
            // Renders label as "(English) Description"
            ->label($tab->makeSuffixLabel('Description')),
    ])
```

#### Custom Locales Per `TranslatableTabs` Instance

[](#custom-locales-per-translatabletabs-instance)

By default, `TranslatableTabs` will use the locales configured for the plugin (or the `translatable.locales` config).

If you need to override the locales for a specific form (or even for a single set of fields), you may pass a custom list directly to the component:

```
use Fnxsoftware\FilamentAstrotomic\Schemas\Components\TranslatableTabs;
use Fnxsoftware\FilamentAstrotomic\TranslatableTab;
use Filament\Forms\Components\TextInput;

TranslatableTabs::make()
    ->customLocales(['ar', 'en', 'fr', 'pt'])
    ->localeTabSchema(fn (TranslatableTab $tab) => [
        TextInput::make($tab->makeName('label'))
            ->required($tab->isMainLocale()),
    ])
```

### `TranslatableSelect` for Relationships

[](#translatableselect-for-relationships)

The standard `Select::relationship()` component does not work with `astrotomic/laravel-translatable`. This package provides a `TranslatableSelect` component to correctly load, search, and display options from a translatable `BelongsTo` relationship.

```
use Fnxsoftware\FilamentAstrotomic\Forms\Components\TranslatableSelect;
use Filament\Forms\Form;

public static function form(Form $form): Form
{
    return $form->schema([
        // ... other fields
        TranslatableSelect::make('country_id')
            ->translatableRelationship('country', 'name')
            ->searchable()
            ->preload()
            ->label('Country')
            ->required(),
    ]);
}
```

This will correctly display the country names in the current locale, and the search functionality will also work on the translated names.

Displaying Translated Content Reactively
----------------------------------------

[](#displaying-translated-content-reactively)

This package provides a seamless way to view translated content on your List and View pages using a `LocaleSwitcher` action that works with dedicated table columns and infolist entries.

### 1. Add the `LocaleSwitcher` Action

[](#1-add-the-localeswitcher-action)

Add the `LocaleSwitcher` to the header actions of your List and View pages.

```
// In your List page (e.g., ListPosts.php)
use Fnxsoftware\FilamentAstrotomic\Actions\LocaleSwitcher;
use Filament\Actions\CreateAction;

protected function getHeaderActions(): array
{
    return [
        CreateAction::make(),
        LocaleSwitcher::make(), // Add this
    ];
}
```

[![CleanShot 2025-09-29 at 12 04 48@2x](https://private-user-images.githubusercontent.com/47450090/495087410-a59f0fa7-4709-483e-bda6-3e3a9604ad0b.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0NTE5OTIsIm5iZiI6MTc3NTQ1MTY5MiwicGF0aCI6Ii80NzQ1MDA5MC80OTUwODc0MTAtYTU5ZjBmYTctNDcwOS00ODNlLWJkYTYtM2UzYTk2MDRhZDBiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDA2VDA1MDEzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZiNjliNGIxZTA0OWRjMmU2YWFiNGE2MTdjZjBiZGU0NWNiMTU0NTc0YzlkNGFlYTFjMzI3ZjNjNzJiMjgzYzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qoaT1Jbifu2X1LbQjILG2DOMAMiBYbVWShsRbQqCLkI)](https://private-user-images.githubusercontent.com/47450090/495087410-a59f0fa7-4709-483e-bda6-3e3a9604ad0b.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0NTE5OTIsIm5iZiI6MTc3NTQ1MTY5MiwicGF0aCI6Ii80NzQ1MDA5MC80OTUwODc0MTAtYTU5ZjBmYTctNDcwOS00ODNlLWJkYTYtM2UzYTk2MDRhZDBiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDA2VDA1MDEzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZiNjliNGIxZTA0OWRjMmU2YWFiNGE2MTdjZjBiZGU0NWNiMTU0NTc0YzlkNGFlYTFjMzI3ZjNjNzJiMjgzYzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qoaT1Jbifu2X1LbQjILG2DOMAMiBYbVWShsRbQqCLkI)### 2. Use `TranslatableColumn` in Tables

[](#2-use-translatablecolumn-in-tables)

The `TranslatableColumn` automatically displays the translation for the selected locale and provides out-of-the-box search and sort functionality.

```
// In your Table definition
use Fnxsoftware\FilamentAstrotomic\Tables\Columns\TranslatableColumn;
use Filament\Tables\Table;

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TranslatableColumn::make('title')
                ->searchable()
                ->sortable(),
            // ... other columns
        ]);
}
```

### 3. Use `TranslatableEntry` in Infolists

[](#3-use-translatableentry-in-infolists)

Similarly, use `TranslatableEntry` in your infolists to display translated content that reacts to the `LocaleSwitcher`.

```
// In your Infolist definition
use Fnxsoftware\FilamentAstrotomic\Infolists\Components\TranslatableEntry;
use Filament\Infolists\Infolist;

public static function infolist(Infolist $infolist): Infolist
{
    return $infolist
        ->schema([
            TranslatableEntry::make('title'),
            TranslatableEntry::make('content'),
            // ... other entries
        ]);
}
```

🚀 Single Locale Optimization &amp; Customization
------------------------------------------------

[](#-single-locale-optimization--customization)

### Automatic Grid View

[](#automatic-grid-view)

When your application or a specific tenant only has **one locale** active, `TranslatableTabs` will automatically switch its layout to a standard **Grid**.

This removes the unnecessary tab bar, rendering the fields directly. This provides a cleaner UI for single-language contexts without requiring code changes.

### Forcing Tabs Layout

[](#forcing-tabs-layout)

If you prefer to always show the language tabs (even when only one locale is available), you can force the layout using one of two methods:

#### 1. Global Configuration

[](#1-global-configuration)

Force tabs globally for all `TranslatableTabs` components in your `AdminPanelProvider`:

```
use Fnxsoftware\FilamentAstrotomic\FilamentAstrotomicPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugin(
            FilamentAstrotomicPlugin::make()
                ->force() // Always show tabs
        );
}
```

#### 2. Per-Component Configuration

[](#2-per-component-configuration)

Force tabs on a specific component:

```
use Fnxsoftware\FilamentAstrotomic\Schemas\Components\TranslatableTabs;

TranslatableTabs::make('translations')
    ->force() // Always show tabs for this specific component
    ->localeTabSchema(fn (TranslatableTab $tab) => [
        // ...
    ])
```

---

### Custom Locales for Switcher

[](#custom-locales-for-switcher)

You can now define specific locales for the `LocaleSwitcher` action, overriding the global or tenant configurations. This is useful if specific resources or pages only support a subset of languages.

```
use Fnxsoftware\FilamentAstrotomic\Actions\LocaleSwitcher;

// Pass a list of locale codes (labels generated automatically)
LocaleSwitcher::make()
    ->locales(['en', 'fr']);

// Or pass custom labels
LocaleSwitcher::make()
    ->locales([
        'en' => 'English (US)',
        'fr' => 'Français (France)',
    ]);
```

Advanced Usage
--------------

[](#advanced-usage)

### Custom Locales Per-Resource

[](#custom-locales-per-resource)

Override the `getTranslatableLocales()` method in your resource to specify a different set of locales than the global configuration.

```
public static function getTranslatableLocales(): array
{
    return ['en', 'fr'];
}
```

### Modal Forms

[](#modal-forms)

To use translatable fields inside modal actions (like an `EditAction` on a table row), you must correctly mutate the data.

```
use App\Models\Post;
use Filament\Tables\Actions\EditAction;

->actions([
    EditAction::make()->mutateRecordDataUsing(function (Post $record, array $data) {
        return static::mutateTranslatableData($record, $data);
    }),
])
```

### Nested Relationship Support

[](#nested-relationship-support)

`TranslatableColumn` and `TranslatableEntry` support displaying translated attributes on nested relationships using dot notation.

Search support is available for relationship paths handled by the component.

Sorting support is currently limited and should be considered supported for direct attributes and simple relationship cases only.

**`TranslatableColumn` with a relationship:**

The column will display the country's name, and the search and sort functionality will correctly filter and order the `governorates` table based on the name of the related country.

```
// In your GovernorateResource table
TranslatableColumn::make('country.name')
    ->label('Country')
    ->searchable()
    ->sortable(),
```

**`TranslatableEntry` with a relationship:**

The entry will display the translated name of the related country on the governorate's view page.

```
// In your GovernorateResource infolist
TranslatableEntry::make('country.name')
    ->label('Country'),
```

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.

Credits
-------

[](#credits)

- **Original Author:** [Oleksandr Moik (cactus-galaxy)](https://github.com/oleksandr-moik)
- **Filament v4 Fork:** [Alary Dorian (Doriiaan)](https://github.com/Doriiaan)
- **Current Maintainer:** [Fnx-Software](https://github.com/fnx-software)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

46

—

FairBetter than 93% of packages

Maintenance88

Actively maintained with recent releases

Popularity18

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~11 days

Total

13

Last Release

89d ago

Major Versions

v1.2.8 → v2.0.02026-02-12

### Community

Maintainers

![](https://www.gravatar.com/avatar/c75d8af0e7bddaa35fff99131dacab0e1a75da375972ca67a8e81b99ba40a57b?d=identicon)[mstfkhazaal](/maintainers/mstfkhazaal)

---

Top Contributors

[![mstfkhazaal](https://avatars.githubusercontent.com/u/47450090?v=4)](https://github.com/mstfkhazaal "mstfkhazaal (61 commits)")

---

Tags

astrotomicfilamentfilament-pluginfilament4filamentphplaravellaravel-translatablelocalizationmultilingualtranslationslaraveltranslationslaravel-translatabletranslatablefilamentastrotomicfilament-astrotomicFenixSoftwarefnx-softwarefilamentastrotomic

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/fnx-software-filament-astrotomic/health.svg)

```
[![Health](https://phpackages.com/badges/fnx-software-filament-astrotomic/health.svg)](https://phpackages.com/packages/fnx-software-filament-astrotomic)
```

###  Alternatives

[cactus-galaxy/filament-astrotomic

Filament support for Astrotomic's Laravel Translatable package.

2516.3k](/packages/cactus-galaxy-filament-astrotomic)[schmeits/filament-character-counter

This is a Filament character counter TextField and Textarea form field for Filament v4 and v5

33184.7k6](/packages/schmeits-filament-character-counter)[abdulmajeed-jamaan/filament-translatable-tabs

Simplifying managing json based translation columns using tabs

3755.2k1](/packages/abdulmajeed-jamaan-filament-translatable-tabs)[mvenghaus/filament-plugin-translatable-inline

An alternative to https://github.com/filamentphp/spatie-laravel-translatable-plugin. The difference is that all translations occur directly under each field.

2045.5k](/packages/mvenghaus-filament-plugin-translatable-inline)[defstudio/filament-searchable-input

A searchable autocomplete input for Filament forms

3212.4k](/packages/defstudio-filament-searchable-input)[redberry/page-builder-plugin

Page builder plugin for filamentphp admin panel to build pages using blocks.

242.8k](/packages/redberry-page-builder-plugin)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
