[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"package:filament-translatable-pro":3},{"type":4,"package":5,"activeDoc":35,"seo":213,"alternates":215,"editable":218},"package",{"id":6,"title":7,"slug":8,"url":9,"excerpt":10,"formatted_price":11,"type":12,"github_url":15,"external_url":16,"plumb":17,"category":25,"tags":28,"cover":35,"blocks":36,"toc":86,"docs":212},3,"Translatable Pro","filament-translatable-pro","\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro","Streamline multi-language content management in FilamentPHP projects.","$50",{"value":13,"label":14},"paid","Paid","https:\u002F\u002Fgithub.com\u002Fafsakar\u002Ffilament-translatable-pro-docs","https:\u002F\u002Fafsakar.lemonsqueezy.com\u002Fbuy\u002F15f04f47-2ed2-488e-afad-e13f55c1262f",{"version":18,"security":19,"abandoned":20,"composite":21,"ecosystem":22,"checked_at":23,"maintenance":22,"url":24},"v2.2.0",54.32,false,74.88,100,"2026-08-15T20:50:10+00:00","https:\u002F\u002Fplumbphp.dev\u002Fafsakar\u002Ffilament-translatable-pro",{"id":6,"title":26,"slug":27},"FilamentPHP","filamentphp",[29,32],{"id":30,"title":31,"slug":31},13,"v4",{"id":33,"title":34,"slug":34},14,"v5",null,[37,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83],{"type":38,"data":39},"general.rich-text",{"content":40},"\u003Ccenter>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Frefs\u002Fheads\u002Fmain\u002Fart\u002Ftranslatable-pro-cover.png\" alt=\"FilamentPHP Translatable Pro\" width=\"1672\" height=\"941\">\u003C\u002Fcenter>",{"type":38,"data":42},{"content":43},"\u003Ch2 id=\"table-of-contents\">Table of Contents\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#introduction\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#features\">Features\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#breaking-changes-from-v1\">Breaking Changes from V1\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#migration-guide\">Migration Guide\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#installation\">Installation\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#register-the-plugin\">Register the Plugin\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#usage\">Usage\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#preparing-resources\">Preparing Resources\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#using-translatableinput\">Using TranslatableInput\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#specialized-use-cases\">Specialized Use Cases\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#actions\">Actions\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#translaterecordaction\">TranslateRecordAction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#translatecontentaction\">TranslateContentAction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#checktranslationsaction\">CheckTranslationsAction\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#columns\">Columns\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#translationprogresscolumn\">TranslationProgressColumn\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#translatedcolumn\">TranslatedColumn\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#translation-status\">Translation Status\u003C\u002Fa>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#translationstatusresource\">TranslationStatusResource\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#translation-status-command\">Translation Status Command\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#missing-translation-keys-command\">Missing Translation Keys Command\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#translation-manager\">Translation Manager\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#support\">Support\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>",{"type":38,"data":45},{"content":46},"\u003Ch2 id=\"introduction\">Introduction\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Filament Translatable Pro V2\u003C\u002Fstrong> is a powerful FilamentPHP v4 plugin that enhances the \u003Ca href=\"https:\u002F\u002Fspatie.be\u002Fdocs\u002Flaravel-translatable\u002F\">Spatie Translatable package\u003C\u002Fa> with advanced, user-friendly features. This major version introduces significant improvements, including enhanced translation management, better performance, and a more intuitive API design.\u003C\u002Fp>",{"type":38,"data":48},{"content":49},"\u003Ch2 id=\"features\">Features\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Enhanced TranslatableInput\u003C\u002Fstrong>: Improved multi-language management with better UX and performance\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Advanced Translation Actions\u003C\u002Fstrong>: New \u003Ccode>TranslateRecordAction\u003C\u002Fcode> and \u003Ccode>TranslateContentAction\u003C\u002Fcode> for comprehensive translation workflows\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Translation Status Tracking\u003C\u002Fstrong>: Advanced tracking and monitoring of translation completeness\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Smart Column Components\u003C\u002Fstrong>: \u003Ccode>TranslatedColumn\u003C\u002Fcode> and \u003Ccode>TranslationProgressColumn\u003C\u002Fcode> for better data display\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved Locale Switcher\u003C\u002Fstrong>: Enhanced global locale switching with multiple display modes\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Background Translation Jobs\u003C\u002Fstrong>: Asynchronous translation processing for better performance\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Email Notifications\u003C\u002Fstrong>: Get notified about missing translations and translation completion\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Auto-detection\u003C\u002Fstrong>: Automatically detect translatable attributes from models\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Flag Support\u003C\u002Fstrong>: Visual flags for better locale identification\u003C\u002Fli>\n\u003C\u002Ful>",{"type":38,"data":51},{"content":52},"\u003Ch2 id=\"breaking-changes-from-v1\">Breaking Changes from V1\u003C\u002Fh2>\n\u003Ch3 id=\"important-v2-introduces-several-breaking-changes-please-read-this-section-carefully-before-upgrading\">⚠️ Important: V2 introduces several breaking changes. Please read this section carefully before upgrading.\u003C\u002Fh3>\n\u003Ch4 id=\"1-namespace-changes\">1. Namespace Changes\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Actions Namespace:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1\nuse Afsakar\\FilamentTranslatablePro\\Actions\\TranslateAndCopyAction;\nuse Afsakar\\FilamentTranslatablePro\\Actions\\TranslateFieldAction;\n\n\u002F\u002F V2\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Actions\\TranslateRecordAction;\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Actions\\TranslateContentAction;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Components Namespace:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1\nuse Afsakar\\FilamentTranslatablePro\\Forms\\Components\\TranslatableInput;\n\n\u002F\u002F V2\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Components\\TranslatableInput;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Columns Namespace:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1\nuse Afsakar\\FilamentTranslatablePro\\Columns\\TranslationProgressColumn;\n\n\u002F\u002F V2\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Columns\\TranslationProgressColumn;\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Columns\\TranslatedColumn; \u002F\u002F New\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"2-plugin-configuration-changes\">2. Plugin Configuration Changes\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Removed Methods:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>-&gt;renderHook()\u003C\u002Fcode> - Global switcher location is now fixed\u003C\u002Fli>\n\u003Cli>\u003Ccode>-&gt;suffixLocale()\u003C\u002Fcode> and \u003Ccode>-&gt;prefixLocale()\u003C\u002Fcode> - Now handled at component level\u003C\u002Fli>\n\u003Cli>\u003Ccode>-&gt;navigationTitle()\u003C\u002Fcode>, \u003Ccode>-&gt;navigationGroup()\u003C\u002Fcode>, etc. - Now configured via config file\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>New Methods:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>-&gt;localeSwitcherType()\u003C\u002Fcode> - Choose between 'dropdown' and 'toggle'\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4 id=\"3-action-name-changes\">3. Action Name Changes\u003C\u002Fh4>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1\nTranslateAndCopyAction::make() \u002F\u002F Renamed\nTranslateFieldAction::make()   \u002F\u002F Renamed\n\n\u002F\u002F V2\nTranslateRecordAction::make()  \u002F\u002F New name\nTranslateContentAction::make() \u002F\u002F New name\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"4-method-name-changes\">4. Method Name Changes\u003C\u002Fh4>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1\nTranslatableInput::make()\n    -&gt;prefixLocale()    \u002F\u002F Removed\n    -&gt;suffixLocale()    \u002F\u002F Removed\n    -&gt;exclude()         \u002F\u002F Renamed\n\n\u002F\u002F V2\nTranslatableInput::make()\n    -&gt;prefixLocaleLabel()   \u002F\u002F New\n    -&gt;suffixLocaleLabel()   \u002F\u002F New\n    -&gt;excludeFields()       \u002F\u002F New name\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"5-facade-changes\">5. Facade Changes\u003C\u002Fh4>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1\nuse Afsakar\\FilamentTranslatablePro\\Facades\\FilamentTranslatablePro;\n\n\u002F\u002F V2\nuse Afsakar\\FilamentTranslatablePro\\Facades\\TranslatableProFacade;\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":38,"data":54},{"content":55},"\u003Ch2 id=\"migration-guide\">Migration Guide\u003C\u002Fh2>\n\u003Ch3 id=\"step-1-update-namespaces\">Step 1: Update Namespaces\u003C\u002Fh3>\n\u003Cp>Replace all old namespaces with new ones:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\"># Find and replace in your codebase:\n# Actions\nfind . -name &quot;*.php&quot; -exec sed -i '' 's\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Actions\\\\\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Filament\\\\Actions\\\\\u002Fg' {} \\;\n\n# Components\nfind . -name &quot;*.php&quot; -exec sed -i '' 's\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Forms\\\\Components\\\\\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Filament\\\\Components\\\\\u002Fg' {} \\;\n\n# Columns\nfind . -name &quot;*.php&quot; -exec sed -i '' 's\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Columns\\\\\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Filament\\\\Columns\\\\\u002Fg' {} \\;\n\n# Facades\nfind . -name &quot;*.php&quot; -exec sed -i '' 's\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Facades\\\\FilamentTranslatablePro\u002Fuse Afsakar\\\\FilamentTranslatablePro\\\\Facades\\\\TranslatableProFacade\u002Fg' {} \\;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"step-2-update-action-names\">Step 2: Update Action Names\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F Replace these action calls:\nTranslateAndCopyAction::make() \u002F\u002F Change to TranslateRecordAction::make()\nTranslateFieldAction::make()   \u002F\u002F Change to TranslateContentAction::make()\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"step-3-update-plugin-configuration\">Step 3: Update Plugin Configuration\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1 Configuration (Remove these)\nFilamentTranslatableProPlugin::make()\n    -&gt;renderHook(PanelsRenderHook::TOPBAR_START)          \u002F\u002F Remove\n    -&gt;suffixLocale(true)                                   \u002F\u002F Remove\n    -&gt;prefixLocale(true)                                   \u002F\u002F Remove\n    -&gt;navigationTitle('Content Translations')             \u002F\u002F Remove\n    -&gt;navigationGroup('Content')                           \u002F\u002F Remove\n    -&gt;navigationSort(1)                                    \u002F\u002F Remove\n    -&gt;navigationIcon('heroicon-o-globe')                   \u002F\u002F Remove\n    -&gt;navigationSlug('content-translations');             \u002F\u002F Remove\n\n\u002F\u002F V2 Configuration (Use this)\nFilamentTranslatableProPlugin::make()\n    -&gt;locales([\n        'tr' =&gt; 'Türkçe',\n        'en' =&gt; 'English'\n    ])\n    -&gt;globalSwitcher(true)\n    -&gt;localeSwitcherType('dropdown'); \u002F\u002F New: 'dropdown' or 'toggle'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"step-4-update-component-methods\">Step 4: Update Component Methods\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F V1\nTranslatableInput::make()\n    -&gt;prefixLocale() \u002F\u002F Deprecated\n    -&gt;suffixLocale() \u002F\u002F Deprecated\n    -&gt;exclude(['description']);\n\n\u002F\u002F V2\nTranslatableInput::make()\n    -&gt;excludeFields(['description']);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"step-5-update-configuration-file\">Step 5: Update Configuration File\u003C\u002Fh3>\n\u003Cp>Publish and update the config file:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --tag=&quot;filament-translatable-pro-config&quot; --force\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Update your config file:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F config\u002Ffilament-translatable-pro.php\nreturn [\n    'locales' =&gt; ['en', 'tr'],\n\n    \u002F\u002F New configuration section\n    'translation_status' =&gt; [\n        'navigation_group' =&gt; 'Content',\n        'navigation_icon' =&gt; 'heroicon-o-language',\n        'model_label' =&gt; 'Translation Status',\n        'navigation_label' =&gt; 'Translation Status',\n        'slug' =&gt; 'translation-statuses',\n        'sort' =&gt; 99,\n    ],\n];\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"step-6-run-migrations\">Step 6: Run Migrations\u003C\u002Fh3>\n\u003Cp>V2 includes new database tables:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan migrate\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":38,"data":57},{"content":58},"\u003Ch2 id=\"installation\">Installation\u003C\u002Fh2>\n\u003Cp>Filament Translatable Pro uses AnyStack to handle payment, licensing, and distribution.\u003C\u002Fp>\n\u003Cp>You can get your license here: \u003Ca href=\"https:\u002F\u002Fafsakar.lemonsqueezy.com\u002Fbuy\u002F15f04f47-2ed2-488e-afad-e13f55c1262f\">FilamentPHP Translatable PRO\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>To install you'll need to add the repository to your composer.json file:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">{\n    &quot;repositories&quot;: [\n        {\n            &quot;type&quot;: &quot;composer&quot;,\n            &quot;url&quot;: &quot;https:\u002F\u002Fsatis.afsakar.com&quot;\n        }\n    ]\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Once the repository has been added to the composer.json file, you can install Filament Translatable Pro like any other composer package using the composer require command:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">composer require afsakar\u002Ffilament-translatable-pro\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You will be prompted to provide your username and password. The username will be the email address and the password will be equal to your license key.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">Loading composer repositories with package information\nAuthentication required (satis.afsakar.com):\nUsername: [license-email]\nPassword: [license-key]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Next, add the plugin's views to your custom theme in your \u003Ccode>theme.css\u003C\u002Fcode> file:\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>Important\u003C\u002Fstrong>\u003Cbr \u002F>\nIf you haven't set up a custom theme and are using a Panel, follow the instructions in the \u003Ca href=\"https:\u002F\u002Ffilamentphp.com\u002Fdocs\u002F4.x\u002Fpanels\u002Fthemes#creating-a-custom-theme\">Filament Docs\u003C\u002Fa> first. This setup applies to both the Panels and standalone Forms packages.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cpre>\u003Ccode class=\"language-css\">@import '..\u002Fyour\u002Fvendor\u002Fpath\u002Ftranslatable-pro\u002Fresources\u002Fcss\u002Findex.css';\n\n@source '..\u002Fyour\u002Fvendor\u002Fpath\u002Fafsakar\u002Ffilament-translatable-pro\u002Fresources\u002Fviews\u002F**\u002F*';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Afterward, run \u003Ccode>npm run build\u003C\u002Fcode> or \u003Ccode>yarn build\u003C\u002Fcode> to compile assets.\u003C\u002Fp>\n\u003Cp>Publish the configuration file if needed:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --tag=&quot;filament-translatable-pro-config&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>In the published config file, you can define the available locales and translation status settings:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">return [\n    'locales' =&gt; ['tr', 'en'],\n    \n    'translation_status' =&gt; [\n        'navigation_group' =&gt; 'Content',\n        'navigation_icon' =&gt; 'heroicon-o-language',\n        'model_label' =&gt; 'Translation Status',\n        'navigation_label' =&gt; 'Translation Status',\n        'slug' =&gt; 'translation-statuses',\n        'sort' =&gt; 99,\n    ],\n];\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Optionally, publish translations using:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --tag=&quot;filament-translatable-pro-translations&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Run the migrations:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan migrate\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"register-the-plugin\">Register the Plugin\u003C\u002Fh3>\n\u003Cp>Register the plugin in your Filament service provider:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">class AdminPanelProvider extends PanelProvider\n{\n    public function panel(Panel $panel): Panel\n    {\n        return $panel\n            -&gt;plugins([\n                \\Afsakar\\FilamentTranslatablePro\\FilamentTranslatableProPlugin::make()\n                    -&gt;locales([\n                        'tr' =&gt; 'Türkçe',\n                        'en' =&gt; 'English'\n                    ])\n                    -&gt;globalSwitcher(true) \u002F\u002F Enable\u002Fdisable the global switcher\n                    -&gt;localeSwitcherType('dropdown') \u002F\u002F 'dropdown' or 'toggle'\n            ]);\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":38,"data":60},{"content":61},"\u003Ch2 id=\"usage\">Usage\u003C\u002Fh2>\n\u003Ch3 id=\"preparing-resources\">Preparing Resources\u003C\u002Fh3>\n\u003Cp>To prepare your resources for translatable fields, add the \u003Ccode>Translatable\u003C\u002Fcode> trait in your Filament Resources:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources;\nuse Afsakar\\FilamentTranslatablePro\\Resources\\Concerns\\Translatable;\nuse Filament\\Resources\\Resource;\n\nclass PostResource extends Resource\n{\n    use Translatable;\n    \u002F\u002F resource code\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Add the \u003Ccode>Translatable\u003C\u002Fcode> trait to your List Page as well:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources\\PostResource\\Pages;\n\nuse Afsakar\\FilamentTranslatablePro\\Resources\\Pages\\ListRecords\\Concerns\\Translatable;\nuse App\\Filament\\Resources\\PostResource;\nuse Filament\\Resources\\Pages\\ListRecords;\n\nclass ListPosts extends ListRecords\n{\n    use Translatable;\n\n    protected static string $resource = PostResource::class;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Edit Page:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources\\PostResource\\Pages;\n\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Actions\\TranslateRecordAction;\nuse Afsakar\\FilamentTranslatablePro\\Resources\\Pages\\EditRecords\\Concerns\\Translatable;\nuse App\\Filament\\Resources\\PostResource;\nuse Filament\\Actions;\nuse Filament\\Resources\\Pages\\EditRecord;\n\nclass EditPost extends EditRecord\n{\n    use Translatable;\n\n    protected static string $resource = PostResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            TranslateRecordAction::make(),\n            Actions\\DeleteAction::make(),\n        ];\n    }\n\n    \u002F\u002F You can use Translatable in widgets as well\n    protected function getHeaderWidgets(): array\n    {\n        return [\n            PostResource\\Widgets\\PostCommentsWidget::make([\n                'activeLocale' =&gt; $this-&gt;activeLocale, \u002F\u002F You need to pass the active locale to the widget\n            ]),\n        ];\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>View Page:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources\\PostResource\\Pages;\n\nuse Afsakar\\FilamentTranslatablePro\\Resources\\Pages\\ViewRecord\\Concerns\\Translatable;\nuse App\\Filament\\Resources\\PostResource;\nuse Filament\\Resources\\Pages\\ViewRecord;\n\nclass ViewPost extends ViewRecord\n{\n    use Translatable;\n\n    protected static string $resource = PostResource::class;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Create Page:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources\\PostResource\\Pages;\n\nuse Afsakar\\FilamentTranslatablePro\\Resources\\Pages\\CreateRecord\\Concerns\\Translatable;\nuse App\\Filament\\Resources\\PostResource;\nuse Filament\\Resources\\Pages\\CreateRecord;\n\nclass CreatePost extends CreateRecord\n{\n    use Translatable;\n\n    protected static string $resource = PostResource::class;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>PostCommentsWidget class:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources\\PostResource\\Widgets;\n\nuse Afsakar\\FilamentTranslatablePro\\Facades\\TranslatableProFacade;\nuse Afsakar\\FilamentTranslatablePro\\Resources\\Widgets\\Concerns\\Translatable;\nuse Filament\\Widgets\\StatsOverviewWidget as BaseWidget;\n\nclass PostCommentsWidget extends BaseWidget\n{\n    use Translatable;\n\n    public ?Model $record = null;\n\n    protected function getStats(): array\n    {\n        return [\n            BaseWidget\\Stat::make('Total ('.TranslatableProFacade::getLocaleLabel($this-&gt;activeLocale).')', $this-&gt;record-&gt;comments-&gt;where('locale', $this-&gt;activeLocale)-&gt;count())\n                -&gt;icon('heroicon-o-chat-bubble-left-right'),\n            BaseWidget\\Stat::make('Published ('.TranslatableProFacade::getLocaleLabel($this-&gt;activeLocale).')', $this-&gt;record-&gt;comments-&gt;where('locale', $this-&gt;activeLocale)-&gt;whereNotNull('published_at')-&gt;count())\n                -&gt;icon('heroicon-o-check-circle'),\n            BaseWidget\\Stat::make('Unpublish ('.TranslatableProFacade::getLocaleLabel($this-&gt;activeLocale).')', $this-&gt;record-&gt;comments-&gt;where('locale', $this-&gt;activeLocale)-&gt;whereNull('published_at')-&gt;count())\n                -&gt;icon('heroicon-o-clock'),\n        ];\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>For resources with relationships, include the \u003Ccode>Translatable\u003C\u002Fcode> trait in the related Resource Form Page:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources\\PostResource\\RelationManagers;\n\nuse Afsakar\\FilamentTranslatablePro\\Resources\\RelationManagers\\Concerns\\Translatable;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\n\nclass CategoriesRelationManager extends RelationManager\n{\n    use Translatable;\n\n    protected static string $relationship = 'categories';\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Frefs\u002Fheads\u002Fmain\u002Fart\u002Ftable-new.gif\" \u002F>\n\u003Ch3 id=\"using-translatableinput\">Using TranslatableInput\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>TranslatableInput\u003C\u002Fcode> component supports multi-language input fields in Filament forms:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Filament\\Components\\TranslatableInput;\nuse Filament\\Forms;\nuse Filament\\Actions\\Action;\n\nTranslatableInput::make()\n    -&gt;locales(['tr', 'en'])\n    -&gt;onlyMainLocaleRequired(condition: true, force: false) \n    -&gt;showFlags(true)\n    -&gt;excludeFields(['description'])\n    -&gt;vertical()\n    -&gt;schema([\n        Forms\\Components\\TextInput::make('name')-&gt;required(fn ($component) =&gt; $component-&gt;getMeta('locale') === 'tr'),\n        Forms\\Components\\Textarea::make('description')-&gt;required(fn ($component) =&gt; $component-&gt;getMeta('locale') === 'tr'),\n    ]);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Available Methods:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>excludeFields()\u003C\u002Fcode>: An array of fields to be excluded from the component\u003C\u002Fli>\n\u003Cli>\u003Ccode>onlyMainLocaleRequired()\u003C\u002Fcode>: Make only main locale required if component has required attribute. If force is true, make all components required for main locale. (defaults: condition: true, force: false)\u003C\u002Fli>\n\u003Cli>\u003Ccode>showFlags()\u003C\u002Fcode>: Show flags in the tabs\u003C\u002Fli>\n\u003Cli>\u003Ccode>locales()\u003C\u002Fcode>: An array of locale codes to be used in the component\u003C\u002Fli>\n\u003Cli>\u003Ccode>vertical()\u003C\u002Fcode>: Display the locale tabs vertically\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Filament\\Components\\TranslatableInput;\nuse Filament\\Forms;\n\nTranslatableInput::make()\n    -&gt;schema([\n        Forms\\Components\\Section::make([\n            Forms\\Components\\TextInput::make('title'),\n            Forms\\Components\\Textarea::make('description'),\n        ]),\n    ]);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ccenter width=\"100%\">Horizontal Layout\u003C\u002Fcenter>\n\u003Ccenter width=\"100%\">\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Frefs\u002Fheads\u002Fmain\u002Fart\u002Fform-new.gif\" \u002F>\n\u003C\u002Fcenter>\n\u003Ccenter>Vertical Layout\u003C\u002Fcenter>\n\u003Ccenter width=\"100%\">\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Frefs\u002Fheads\u002Fmain\u002Fart\u002Fvertical.png\" \u002F>\n\u003C\u002Fcenter>\n\u003Ch3 id=\"specialized-use-cases\">Specialized Use Cases\u003C\u002Fh3>\n\u003Cp>Get the current locale of a component with \u003Ccode>getMeta('locale')\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Facades\\TranslatableProFacade;\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Actions\\TranslateContentAction;\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Components\\TranslatableInput;\nuse Filament\\Forms;\n\npublic static function form(Form $form): Form\n{\n    return $form\n        -&gt;schema([\n            TranslatableInput::make()\n                -&gt;schema([\n                    Forms\\Components\\Section::make('Title Section')\n                        -&gt;columnSpanFull()\n                        -&gt;columns()\n                        -&gt;schema([\n                            Forms\\Components\\TextInput::make('title')\n                                -&gt;live(true)\n                                -&gt;hintAction(TranslateContentAction::make())\n                                -&gt;afterStateUpdated(function ($state, $set, $context, $component) {\n                                    if ($context === 'edit') {\n                                        return;\n                                    }\n    \n                                    $language = $component-&gt;getMeta('locale');\n    \n                                    $set('slug.' . $language, str($state)-&gt;slug());\n                                })\n                                -&gt;required(),\n                            Forms\\Components\\TextInput::make('slug')\n                                -&gt;dehydrateStateUsing(function ($state) {\n                                    return str($state)-&gt;slug();\n                                })-&gt;unique(ignoreRecord: true),\n                        ]),\n                    Forms\\Components\\Section::make()\n                        -&gt;schema([\n                            Forms\\Components\\FileUpload::make('image')-&gt;lazy(),\n                            Forms\\Components\\RichEditor::make('content')-&gt;hintAction(TranslateContentAction::make()),\n                            Forms\\Components\\Repeater::make('optional')\n                                -&gt;label('Optional')\n                                -&gt;addActionLabel(fn($component) =&gt; 'Add Optional (' . TranslatableProFacade::getLocaleLabel($component-&gt;getMeta('locale')) . ')')\n                                -&gt;schema([\n                                    Forms\\Components\\TextInput::make('key'),\n                                    Forms\\Components\\TextInput::make('value'),\n                                ]),\n                        ]),\n                ]),\n        ]);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":38,"data":63},{"content":64},"\u003Ch2 id=\"actions\">Actions\u003C\u002Fh2>\n\u003Ch3 id=\"translaterecordaction\">TranslateRecordAction\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>TranslateRecordAction\u003C\u002Fcode> allows you to translate an entire record from one locale to another using automated translation services.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\Filament\\Resources\\PostResource\\Pages;\n\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Actions\\TranslateRecordAction;\nuse App\\Filament\\Resources\\PostResource;\nuse Filament\\Actions;\nuse Filament\\Resources\\Pages\\EditRecord;\n\nclass EditPost extends EditRecord\n{\n    protected static string $resource = PostResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            TranslateRecordAction::make()\n                -&gt;excepts(['slug']), \u002F\u002F Exclude specific fields from translation\n            Actions\\DeleteAction::make(),\n        ];\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"translatecontentaction\">TranslateContentAction\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>TranslateContentAction\u003C\u002Fcode> allows you to translate individual field content to other locales. This action can be used as a hint action on form fields.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Filament\\Actions\\TranslateContentAction;\nuse Afsakar\\FilamentTranslatablePro\\Filament\\Components\\TranslatableInput;\nuse Filament\\Forms;\n\nTranslatableInput::make()\n    -&gt;schema([\n        Forms\\Components\\RichEditor::make('content')\n            -&gt;hintAction(TranslateContentAction::make()),\n        Forms\\Components\\TextInput::make('title')\n            -&gt;hintAction(TranslateContentAction::make()),\n    ]);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> The \u003Ccode>TranslateContentAction\u003C\u002Fcode> action doesn't work with the \u003Ccode>Repeater\u003C\u002Fcode> component.\u003C\u002Fp>\n\u003Ch3 id=\"checktranslationsaction\">CheckTranslationsAction\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>CheckTranslationsAction\u003C\u002Fcode> allows you to check and update translation status for specific models. This is useful for monitoring translation completeness across your application.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Filament\\Actions\\CheckTranslationsAction;\n\n\u002F\u002F Use in table header actions\nprotected function getHeaderActions(): array\n{\n    return [\n        CheckTranslationsAction::make(),\n    ];\n}\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":38,"data":66},{"content":67},"\u003Ch2 id=\"columns\">Columns\u003C\u002Fh2>\n\u003Ch3 id=\"translationprogresscolumn\">TranslationProgressColumn\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>TranslationProgressColumn\u003C\u002Fcode> displays the translation progress of a record. It automatically detects the translatable attributes from the model and calculates the progress for each locale.\u003C\u002Fp>\n\u003Cp align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Frefs\u002Fheads\u002Fmain\u002Fart\u002Ftranslation-progress-column-bar.png\" width=\"45%\" \u002F>&nbsp;\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Frefs\u002Fheads\u002Fmain\u002Fart\u002Ftranslation-progress-column-circle.png\" width=\"45%\" \u002F>\n\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Filament\\Columns\\TranslationProgressColumn;\n\npublic static function table(Table $table): Table\n{\n    return $table\n        -&gt;columns([\n            Tables\\Columns\\TextColumn::make('title'),\n            TranslationProgressColumn::make('translation_progress')\n                -&gt;label('Translation Progress'),\n            \u002F\u002F or use circle style\n            TranslationProgressColumn::make('translation_progress')\n                -&gt;label('Translation Progress')\n                -&gt;circle(),\n        ]);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"translatedcolumn\">TranslatedColumn\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>TranslatedColumn\u003C\u002Fcode> automatically displays translated content based on the current active locale. It intelligently handles both translatable and non-translatable fields, including relationships.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Filament\\Columns\\TranslatedColumn;\n\npublic static function table(Table $table): Table\n{\n    return $table\n        -&gt;columns([\n            TranslatedColumn::make('title'), \u002F\u002F Will show translated title based on active locale\n            TranslatedColumn::make('category.name'), \u002F\u002F Works with relationships too\n            Tables\\Columns\\TextColumn::make('created_at'),\n        ]);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":38,"data":69},{"content":70},"\u003Ch2 id=\"translation-status\">Translation Status\u003C\u002Fh2>\n\u003Ch3 id=\"setting-up-translation-status\">Setting Up Translation Status\u003C\u002Fh3>\n\u003Cp>First, you need to add the \u003Ccode>HasTranslationStatus\u003C\u002Fcode> trait to your models. You can exclude specific attributes from the translation status calculation by using the \u003Ccode>exceptedTranslationStatusAttributes\u003C\u002Fcode> method.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentTranslatablePro\\Concerns\\InteractsWithTranslationStatus;\n\nclass Post extends Model\n{\n    use InteractsWithTranslationStatus;\n\n    public function exceptedTranslationStatusAttributes(): array\n    {\n        return ['slug']; \u002F\u002F These fields won't be considered in translation status\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Frefs\u002Fheads\u002Fmain\u002Fart\u002Ftranslation-status-new.png\" \u002F>\n\u003Ch3 id=\"translationstatusresource\">TranslationStatusResource\u003C\u002Fh3>\n\u003Cp>The Translation Status Resource provides a comprehensive view of all translation statuses across your application. You can access it through the navigation menu (configurable in the config file).\u003C\u002Fp>\n\u003Cp>Features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>View all models and their translation status\u003C\u002Fli>\n\u003Cli>Filter by model type, language, and translation status\u003C\u002Fli>\n\u003Cli>Bulk actions to update translation statuses\u003C\u002Fli>\n\u003Cli>Export translation status reports\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"translation-status-command\">Translation Status Command\u003C\u002Fh3>\n\u003Cp>This command calculates the translation status of records. It automatically detects the translatable attributes from the model and calculates the status for each locale. You can run this command from the terminal.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan translations:check --model=Post\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Available options:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>--model\u003C\u002Fcode>: Specify the model class name to check (e.g., \u003Ccode>Post\u003C\u002Fcode>, \u003Ccode>User\u003C\u002Fcode>)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Examples:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\"># Check all models\nphp artisan translations:check\n\n# Check specific model\nphp artisan translations:check --model=Post\n\n# Check multiple models (run command multiple times)\nphp artisan translations:check --model=Post\nphp artisan translations:check --model=Category\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The command will:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Scan all translatable attributes for the specified model(s)\u003C\u002Fli>\n\u003Cli>Check translation completeness for each locale\u003C\u002Fli>\n\u003Cli>Update the translation status database\u003C\u002Fli>\n\u003Cli>Send email notifications if requested\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"missing-translation-keys-command\">Missing Translation Keys Command\u003C\u002Fh3>\n\u003Cp>Scan application paths for literal translation keys and write missing keys to the fallback locale JSON file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan translatable-pro:scan-missing-keys\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>By default, the command scans \u003Ccode>app_path()\u003C\u002Fcode> and \u003Ccode>resource_path('views')\u003C\u002Fcode>. You can override paths and excludes in the config file, or per command:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan translatable-pro:scan-missing-keys \\\n    --path=app\u002FFilament \\\n    --path=resources\u002Fviews \\\n    --exclude=resources\u002Fviews\u002Fvendor \\\n    --locale=en \\\n    --dry-run\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>It detects literal keys used with \u003Ccode>__()\u003C\u002Fcode>, \u003Ccode>trans()\u003C\u002Fcode>, \u003Ccode>trans_choice()\u003C\u002Fcode>, \u003Ccode>@lang()\u003C\u002Fcode>, \u003Ccode>Lang::get()\u003C\u002Fcode>, and direct translator \u003Ccode>get()\u003C\u002Fcode> calls. Dynamic keys and package namespace keys such as \u003Ccode>vendor::file.key\u003C\u002Fcode> are skipped.\u003C\u002Fp>\n\u003Ch3 id=\"translation-manager\">Translation Manager\u003C\u002Fh3>\n\u003Cp>The plugin registers a Filament page for editing JSON and PHP language files from the panel.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F config\u002Ffilament-translatable-pro.php\n'translation_manager' =&gt; [\n    'enabled' =&gt; true,\n    'navigation_group' =&gt; null,\n    'navigation_icon' =&gt; 'heroicon-o-queue-list',\n    'navigation_label' =&gt; null,\n    'slug' =&gt; 'translation-manager',\n    'sort' =&gt; 100,\n    'base_path' =&gt; lang_path(),\n    'custom_path' =&gt; base_path('lang-custom'),\n    'exclude' =&gt; [\n        '*\u002Fvalidation.php',\n        '*\u002Fpasswords.php',\n    ],\n    'per_page_options' =&gt; [25, 50, 100],\n],\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Values saved from the manager are written to \u003Ccode>lang-custom\u003C\u002Fcode>. At runtime, \u003Ccode>lang-custom\u003C\u002Fcode> values override the normal \u003Ccode>lang\u003C\u002Fcode> values, while missing custom values fall back to the original language files. The manager supports:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>JSON files such as \u003Ccode>lang\u002Fen.json\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>PHP group files such as \u003Ccode>lang\u002Fen\u002Fmessages.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>lang-custom\u003C\u002Fcode> overrides for both JSON and PHP files\u003C\u002Fli>\n\u003Cli>file type, search, locale, and missing translation filters\u003C\u002Fli>\n\u003Cli>nullable locale filtering, so all locales can be shown together\u003C\u002Fli>\n\u003Cli>missing translation detection across all configured locales\u003C\u002Fli>\n\u003Cli>excluded language files by path pattern, such as \u003Ccode>*\u002Fvalidation.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>paginated editing with configurable per-page options\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The page UI text is translatable through \u003Ccode>resources\u002Flang\u002F*\u002Ftranslatable-pro.php\u003C\u002Fcode> under the \u003Ccode>translation_manager\u003C\u002Fcode> key.\u003C\u002Fp>",{"type":38,"data":72},{"content":73},"\u003Ch2 id=\"quality-testing\">Quality \u002F Testing\u003C\u002Fh2>\n\u003Cp>Install dependencies and run the package checks before opening a pull request:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">composer install\ncomposer test\ncomposer phpstan\nvendor\u002Fbin\u002Fpint --test\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":38,"data":75},{"content":76},"\u003Ch2 id=\"support\">Support\u003C\u002Fh2>\n\u003Cp>If you have a question, bug or feature request, please e-mail me at \u003Ca href=\"mailto:afsakarr@gmail.com\">afsakarr@gmail.com\u003C\u002Fa> or tag @afsakar on #afsakar-translatable-pro on the Filament Discord. Love to hear from you!\u003C\u002Fp>",{"type":38,"data":78},{"content":79},"\u003Ch2 id=\"license\">License\u003C\u002Fh2>\n\u003Cp>This package is licensed under the MIT License. See the LICENSE file for details.\u003C\u002Fp>",{"type":38,"data":81},{"content":82},"\u003Ch2 id=\"credits\">Credits\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fafsakar\">Azad Furkan Şakar\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fafsakar\u002Ffilament-translatable-pro-docs\u002Fblob\u002Fmain\u002F..\u002F..\u002Fcontributors\">All Contributors\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>",{"type":38,"data":84},{"content":85},"\u003Ch2 id=\"security\">Security\u003C\u002Fh2>\n\u003Cp>If you discover any security related issues, please email \u003Ca href=\"mailto:afsakarr@gmail.com\">afsakarr@gmail.com\u003C\u002Fa> instead of using the issue tracker.\u003C\u002Fp>",[87,91,94,97,100,103,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188,191,194,197,200,203,206,209],{"id":88,"label":89,"level":90},"table-of-contents","Table of Contents",2,{"id":92,"label":93,"level":90},"introduction","Introduction",{"id":95,"label":96,"level":90},"features","Features",{"id":98,"label":99,"level":90},"breaking-changes-from-v1","Breaking Changes from V1",{"id":101,"label":102,"level":6},"important-v2-introduces-several-breaking-changes-please-read-this-section-carefully-before-upgrading","⚠️ Important: V2 introduces several breaking changes. Please read this section carefully before upgrading.",{"id":104,"label":105,"level":106},"1-namespace-changes","1. Namespace Changes",4,{"id":108,"label":109,"level":106},"2-plugin-configuration-changes","2. Plugin Configuration Changes",{"id":111,"label":112,"level":106},"3-action-name-changes","3. Action Name Changes",{"id":114,"label":115,"level":106},"4-method-name-changes","4. Method Name Changes",{"id":117,"label":118,"level":106},"5-facade-changes","5. Facade Changes",{"id":120,"label":121,"level":90},"migration-guide","Migration Guide",{"id":123,"label":124,"level":6},"step-1-update-namespaces","Step 1: Update Namespaces",{"id":126,"label":127,"level":6},"step-2-update-action-names","Step 2: Update Action Names",{"id":129,"label":130,"level":6},"step-3-update-plugin-configuration","Step 3: Update Plugin Configuration",{"id":132,"label":133,"level":6},"step-4-update-component-methods","Step 4: Update Component Methods",{"id":135,"label":136,"level":6},"step-5-update-configuration-file","Step 5: Update Configuration File",{"id":138,"label":139,"level":6},"step-6-run-migrations","Step 6: Run Migrations",{"id":141,"label":142,"level":90},"installation","Installation",{"id":144,"label":145,"level":6},"register-the-plugin","Register the Plugin",{"id":147,"label":148,"level":90},"usage","Usage",{"id":150,"label":151,"level":6},"preparing-resources","Preparing Resources",{"id":153,"label":154,"level":6},"using-translatableinput","Using TranslatableInput",{"id":156,"label":157,"level":6},"specialized-use-cases","Specialized Use Cases",{"id":159,"label":160,"level":90},"actions","Actions",{"id":162,"label":163,"level":6},"translaterecordaction","TranslateRecordAction",{"id":165,"label":166,"level":6},"translatecontentaction","TranslateContentAction",{"id":168,"label":169,"level":6},"checktranslationsaction","CheckTranslationsAction",{"id":171,"label":172,"level":90},"columns","Columns",{"id":174,"label":175,"level":6},"translationprogresscolumn","TranslationProgressColumn",{"id":177,"label":178,"level":6},"translatedcolumn","TranslatedColumn",{"id":180,"label":181,"level":90},"translation-status","Translation Status",{"id":183,"label":184,"level":6},"setting-up-translation-status","Setting Up Translation Status",{"id":186,"label":187,"level":6},"translationstatusresource","TranslationStatusResource",{"id":189,"label":190,"level":6},"translation-status-command","Translation Status Command",{"id":192,"label":193,"level":6},"missing-translation-keys-command","Missing Translation Keys Command",{"id":195,"label":196,"level":6},"translation-manager","Translation Manager",{"id":198,"label":199,"level":90},"quality-testing","Quality \u002F Testing",{"id":201,"label":202,"level":90},"support","Support",{"id":204,"label":205,"level":90},"license","License",{"id":207,"label":208,"level":90},"credits","Credits",{"id":210,"label":211,"level":90},"security","Security",[],{"html":214},"\u003Ctitle>FilamentPHP Translatable Pro Plugin - Azad Furkan Şakar\u003C\u002Ftitle>\n\u003Cmeta name=\"description\" content=\"FilamentPHP projelerinde çok dilli içerik yönetimini kolaylaştırın.\">\n\u003Cmeta name=\"keywords\" content=\"laravel, backend, developer, php\">\n\u003Clink rel=\"canonical\" href=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro\">\n\u003Clink rel=\"alternate\" hreflang=\"en\" href=\"https:\u002F\u002Fafsakar.dev\u002Fpackages\u002Ffilament-translatable-pro\">\n\u003Clink rel=\"alternate\" hreflang=\"tr\" href=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro\">\n\u003Clink rel=\"alternate\" hreflang=\"x-default\" href=\"https:\u002F\u002Fafsakar.dev\u002Fpackages\u002Ffilament-translatable-pro\">\n\u003Cmeta name=\"robots\" content=\"index, follow\">\n\u003Cmeta property=\"og:title\" content=\"FilamentPHP Translatable Pro Plugin\">\n\u003Cmeta property=\"og:description\" content=\"FilamentPHP projelerinde çok dilli içerik yönetimini kolaylaştırın.\">\n\u003Cmeta property=\"og:type\" content=\"website\">\n\u003Cmeta property=\"og:site_name\" content=\"Azad Furkan Şakar\">\n\u003Cmeta property=\"og:url\" content=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro\">\n\u003Cmeta property=\"og:image\" content=\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fog-images\u002Fpackages\u002F3-tr.png\">\n\n\u003Cmeta name=\"twitter:site\" content=\"afsakar\">\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\">\n\u003Cmeta name=\"twitter:image\" content=\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fog-images\u002Fpackages\u002F3-tr.png\">\n\u003Cmeta name=\"twitter:title\" content=\"FilamentPHP Translatable Pro Plugin\">\n\u003Cmeta name=\"twitter:description\" content=\"FilamentPHP projelerinde çok dilli içerik yönetimini kolaylaştırın.\">\n\u003Cmeta name=\"twitter:url\" content=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro\">\n\u003Cscript type=\"application\u002Fld+json\">{\"@context\":\"https:\u002F\u002Fschema.org\",\"@type\":\"WebPage\",\"name\":\"FilamentPHP Translatable Pro Plugin\",\"description\":\"FilamentPHP projelerinde çok dilli içerik yönetimini kolaylaştırın.\",\"url\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro\",\"image\":\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fog-images\u002Fpackages\u002F3-tr.png\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro\"}}\u003C\u002Fscript>\u003Cscript type=\"application\u002Fld+json\">{\"@context\":\"https:\u002F\u002Fschema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Paketler\",\"item\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Translatable Pro\",\"item\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro\"}]}\u003C\u002Fscript>\u003Cscript type=\"application\u002Fld+json\">{\"@context\":\"https:\u002F\u002Fschema.org\",\"@type\":\"Person\",\"name\":\"Azad Furkan Şakar\",\"url\":\"https:\u002F\u002Fafsakar.dev\",\"@id\":\"https:\u002F\u002Fafsakar.dev\u002F#person\",\"jobTitle\":\"Backend Developer\",\"image\":\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fsettings\u002Fseo\u002F01KZB42F3FQQSDTQRYYX861RAA.jpeg\",\"sameAs\":[\"https:\u002F\u002Fx.com\u002Fafsakar\",\"https:\u002F\u002Flinkedin.com\u002Fin\u002Fafsakar\",\"https:\u002F\u002Fgithub.com\u002Fafsakar\"]}\u003C\u002Fscript>",{"en":216,"tr":217},"https:\u002F\u002Fafsakar.dev\u002Fpackages\u002Ffilament-translatable-pro","https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-translatable-pro",{"type":4,"id":6}]