定制 martin6363/filament-ai-translator 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

martin6363/filament-ai-translator

Composer 安装命令:

composer require martin6363/filament-ai-translator

包简介

AI-powered auto-translation for Spatie Translatable fields in Filament 4 and 5

README 文档

README

AI-powered, one-click translations for Filament form fields — built for Spatie Translatable and locale-suffixed layouts alike.

License Latest Version PHP Version Laravel Version Filament Version

Translate content across locales in seconds using Google Gemini — directly inside your Filament admin panel.

✨ Features

Feature Description
🌍 Dual-Mode Integration Works with Spatie Translatable JSON/array field states and separate locale-suffixed columns such as title_en, title_am, title_ru.
🧠 Smart Suffix & Layout Detection Detects sibling locale fields inside Tabs, Sections, or any nested Filament layout. Uses Filament's Set Utility and Livewire state paths to populate related fields automatically.
🔄 Resilient AI Failover If the primary Gemini model is under high demand, the package gracefully rotates through gemini-2.5-flash, gemini-2.0-flash, and gemini-1.5-flash to keep translations flowing.
🎨 Adaptive UI Adds a sleek translate action as a suffix on affix-capable fields (TextInput, Select, …) or as a hint on complex editors like RichEditor.
Filament 4 & 5 Ready Built on the modern Filament\Contracts\Plugin architecture with a clean ->aiTranslate() macro on any form Field.
🔔 Polished UX Loading, success, and failure states are surfaced through native Filament notifications.

📸 Demo

Screenshot (recommended: Tab layout with title_en / title_am / title_ru fields).

Filament AI Translator demo — translating fields inside a tabbed locale layout

Example: translate from the English tab and instantly populate Russian sibling fields.

Filament AI Translator demo — translating fields inside a tabbed locale layout

Example: Spatie translatable

📦 Installation

Install the package via Composer:

composer require martin6363/filament-ai-translator

Publish the configuration file:

php artisan vendor:publish --tag=filament-ai-translator-config

Publish the language files (optional — customize notification and action labels):

php artisan vendor:publish --tag=filament-ai-translator-translations

Register the plugin in your Filament panel provider:

use Martin6363\FilamentAiTranslator\FilamentAiTranslatorPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            FilamentAiTranslatorPlugin::make(),
        ]);
}

Note: The package auto-registers via Laravel package discovery. You only need to add the plugin to your panel.

🔐 Environment Setup

Add your Google Gemini credentials to .env:

GEMINI_API_KEY=your-google-ai-studio-api-key
GEMINI_MODEL=gemini-2.0-flash
Variable Required Description
GEMINI_API_KEY Yes API key from Google AI Studio.
GEMINI_MODEL No Primary model. Defaults to gemini-2.0-flash. Fallback models are tried automatically on high-demand errors.

Security: Never commit API keys to version control. Restrict keys in Google AI Studio, rotate them regularly, and use environment-specific secrets in production (e.g. encrypted env, vault, or CI secrets).

⚙️ Configuration

After publishing, customize config/filament-ai-translator.php:

<?php

return [

    'api_key' => env('GEMINI_API_KEY'),

    'model' => env('GEMINI_MODEL', 'gemini-2.0-flash'),

    'default_locales' => [
        'en',
        'ru',
    ],

];

The default_locales array is used when ->aiTranslate() is called without explicit locales. Align these with your Spatie Translatable setup or your _locale field suffixes.

🚀 Usage

Attach ->aiTranslate() to any Filament form field. The macro is registered on Filament\Forms\Components\Field and works with TextInput, Textarea, RichEditor, and more.

Zero-configuration (implicit locales)

Call ->aiTranslate() without arguments to use config('filament-ai-translator.default_locales'):

use Filament\Forms\Components\TextInput;

TextInput::make('title')
    ->aiTranslate();

How it behaves:

  • Spatie / JSON fields — reads the active form locale, translates into all other configured locales, and merges the JSON state.
  • Suffixed fields (title_en) — detects the locale from the field name and fills sibling fields (title_am, title_ru) in the same form — including fields inside Tabs or Sections.

Explicit locales (custom)

Override the default locale list per field:

TextInput::make('title_en')
    ->aiTranslate(['en', 'hy', 'fr', 'es']);

Spatie Translatable (JSON / array state)

Ideal with spatie/laravel-translatable and plugins such as Lara Zeus Spatie Translatable:

use Filament\Forms\Components\RichEditor;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Section;

Section::make('Content')
    ->schema([
        TextInput::make('title')
            ->required()
            ->maxLength(255)
            ->aiTranslate(['en', 'ru']),

        RichEditor::make('content')
            ->required()
            ->aiTranslate(['en', 'ru'])
            ->columnSpanFull(),
    ]);
  1. Switch to your source locale using your translatable locale switcher.
  2. Type content in the active locale.
  3. Click the language action on the field.
  4. Save — translations are written into the multi-locale state.

Separate fields layout (locale suffixes + Tabs)

Perfect when each locale has its own database column (title_en, title_am, title_ru):

use Filament\Forms\Components\RichEditor;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;

Tabs::make('Translations')
    ->tabs([
        Tab::make('English')
            ->schema([
                TextInput::make('title_en')
                    ->label('Title')
                    ->aiTranslate(['en', 'ru']) // <-- empty parameter = config('filament-ai-translator.default_locales'),

                RichEditor::make('description_en')
                    ->label('Description')
                    ->aiTranslate(['en', 'ru'])
                    ->columnSpanFull(),
            ]),

        Tab::make('Russian')
            ->schema([
                TextInput::make('title_ru')
                    ->label('Title')
                    ->aiTranslate(['en', 'ru']),

                RichEditor::make('description_ru')
                    ->label('Description')
                    ->aiTranslate(['en', 'ru'])
                    ->columnSpanFull(),
            ]),
    ])
    ->columnSpanFull();

Filament 5 note: Tabs live under Filament\Schemas\Components\Tabs. In Filament 4, you may use the equivalent layout component from your installed Filament version.

When translating from title_en, the plugin:

  1. Detects base name title and source locale en.
  2. Calls Gemini for targets am and ru.
  3. Sets title_am and title_ru via Filament's Set Utility — even when those fields live in other tabs.

🧩 How it works (under the hood)

┌─────────────────┐     ┌──────────────────────────┐     ┌─────────────────┐
│  User clicks    │────▶│  AiTranslatorService     │────▶│  Gemini API     │
│  translate btn  │     │  (JSON response +        │     │  (with failover)│
└─────────────────┘     │   model rotation)        │     └─────────────────┘
                        └────────────┬─────────────┘
                                     │
              ┌──────────────────────┼──────────────────────┐
              ▼                      ▼                      ▼
     Spatie JSON state      Lara Zeus otherLocaleData   Suffixed siblings
     (array merge)          (per-locale form cache)     (title_am, title_ru)

🌐 Translating UI strings

Publish translations to customize action labels and notifications:

php artisan vendor:publish --tag=filament-ai-translator-translations

Files are published to lang/vendor/filament-ai-translator/.

🧪 Requirements

  • PHP ^8.2 or higher
  • Laravel ^11.0, ^12.0, or ^13.0
  • Filament ^4.0 or ^5.0
  • google-gemini-php/client ^2.0
  • A valid Google Gemini API key

📋 Changelog

Please see CHANGELOG.md for a history of releases and notable changes.

Unreleased

  • Dual-mode translation (Spatie JSON + locale-suffixed fields)
  • Gemini model failover for high-demand scenarios
  • Adaptive suffix / hint action placement
  • Filament 4 & 5 plugin architecture

🤝 Contributing

Contributions are welcome and appreciated.

Please keep PRs focused, follow existing code style, and include tests where applicable.

🙏 Credits

📄 License

The MIT License (MIT). See LICENSE for more information.

Made with ❤️ for the Filament community · GitHub

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-18

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固