organi / translatables
2.10.0
2023-02-13 13:36 UTC
Requires
- php: ^8.0
- illuminate/bus: ^8.0|^9.0
- illuminate/console: ^8.0|^9.0
- illuminate/contracts: ^8.0|^9.0
- illuminate/database: ^8.0|^9.0
- illuminate/queue: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
- spatie/laravel-package-tools: ^1.4.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- orchestra/testbench: ^6.15
- pestphp/pest: ^1.18
- pestphp/pest-plugin-faker: ^1.0
- pestphp/pest-plugin-laravel: ^1.1
README
您可以通过 composer 安装此包
composer require organi/translatables
您可以使用以下命令发布和运行迁移
php artisan vendor:publish --provider="Organi\Translatables\TranslatablesServiceProvider" --tag="translatables-migrations" php artisan migrate
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Organi\Translatables\TranslatablesServiceProvider" --tag="translatables-config"
这是已发布配置文件的内容
return [ 'accepted_locales' => [ 'nl', 'en', 'fr', 'de', ], ];
用法
使您的 eloquent 模型可翻译。
为您的模型创建一个 _translations
表。
Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('code'); $table->timestamps(); }); Schema::create('products_translations', function (Blueprint $table) { $table->translations('translations'); $table->string('name'); $table->text('description'); });
将 HasTranslations
特性添加到您的模型中,并包含可翻译字段的 localizable
数组。
use Organi\Translatables\Traits\HasTranslations; class Product extends Model { use HasTranslations; /** * The attributes that should be translatable. */ protected array $localizable = [ 'name', 'description' ]; }
设置可翻译字段
现在您可以为模型的名字属性添加一个翻译。
use Organi\Translatables\Models\Translation; ... $product->name = Translation::make([ 'nl' => 'Lorem ipsum dolor sit amet', 'en' => 'Lorem ipsum dolor sit amet', 'fr' => 'Lorem ipsum dolor sit amet', ]);
您也可以设置一个数组,模型将把它转换为翻译
$product->name = [ 'nl' => 'Lorem ipsum dolor sit amet', 'en' => 'Lorem ipsum dolor sit amet', 'fr' => 'Lorem ipsum dolor sit amet', ];
您也可以将属性设置为任何非数组的值。在这种情况下,应用默认区域设置将设置为该值。
$product->name = 'Lorem ipsum dolor sit amet'; /* returns: Organi\Translatables\Models\Translation { translations: array:4 [ "nl" => "Lorem ipsum dolor sit amet" "en" => "" "fr" => "" ] } */
或者为单个区域设置设置多个翻译
$product->setTranslations('nl', [ 'name' => 'Lorem ipsum dolor sit amet', 'description' => 'Lorem ipsum dolor sit amet', ]);
或者为单个区域设置单个翻译
$product->setTranslation('nl', 'name', 'Lorem ipsum dolor sit amet');
或者为所有区域设置单个字符串
$product->setAllLocales('title', 'Lorem ipsum dolor sit amet');
获取可翻译字段
获取可翻译字段将返回一个 Translation
对象。
将其转换为字符串将自动采用活动区域设置值。一些选项是
echo $product->name; $dt->title->__toString(), (string) $dt->title
或者您可以获取特定区域设置
echo $product->name->get('en');
在可翻译字段上过滤
此包提供了一个 whereTranslation
函数。
$product = Product::whereTranslation('title', 'Lorem ipsum dolor sit amet')->first();
在可翻译字段上排序
此包提供了一个 orderByTranslation
函数。函数有 3 个参数
field
: 用于排序的字段locale
: 用于排序的区域设置direction
(可选,默认为asc
):asc
或desc
$products = Product::orderByTranslation('title')->get();