shanginn/yalt

为 Eloquent 模型提供另一种 Laravel 翻译器 (Yalt)

dev-master 2019-10-03 08:22 UTC

This package is auto-updated.

Last update: 2024-09-14 23:05:49 UTC


README

警告:此包正在积极开发中,请小心使用

需求

  • PHP 7.*
  • Laravel 5.* (仅测试了 5.4)

安装

composer require shanginn/yalt

将服务提供者添加到 config/app.php

'providers' => [
	//...
	Shanginn\Yalt\YaltServiceProvider::class,
]

迁移

默认情况下,可翻译表的后缀设置为 ll,因此例如,对于 things 表的翻译表应命名为 things_lls

您可以在配置文件中更改此后缀(translation_suffix)。

php artisan make:migration create_things_localizations_table

假设您需要为 Thing 模型添加可翻译的标题和描述。打开您的迁移文件并修改 up 方法,如下所示

// database/migrations/2017_02_20_200652_create_things_localizations_table.php

public function up()
{
	Schema::create('things_lls', function (Blueprint $table) {
		$table->increments('id');
		$table->char('locale', 2)->index();
		$table->integer('thing_id')->index();
		$table->string('title');
		$table->string('description');

		$table->unique(['thing_id', 'locale']);

		$table->foreign('thing_id', 'thing_idx')
			->references('id')->on('things')
			->onDelete('cascade')
			->onUpdate('cascade');
	});
}

模型

要使 Thing 模型可翻译,您只需导入 Translatable 特性,使用它并定义可翻译字段。

// App/Thing.php
//...
use Shanginn\Yalt\Eloquent\Concerns\Translatable;

class Thing extends Model
{
	use Translatable;
	
	protected $translatable = ['title', 'description'];
//...

这就完成了!无需模型、无需关系。纯粹的魅力。

中间件

如果您想根据 'Accept-Language' 头信息更改当前应用程序的区域设置,请将 locale 中间件注册到 Http/Kernel.php

// Http/Kernel.php
//...
protected $routeMiddleware = [
//...
	'locale' => \Shanginn\Yalt\Http\Middleware\Localization::class,
//...
]

并将其应用于一些路由。

用法

Thing::create([
	'title' => [ // Explicit locale definition for title
		'en' => 'Title in english',
		'ru' => 'Русский заголовок'
	],
	// Use default locale for description
	'description' => 'Description in the default locale'
])

抱歉。目前就这么多。更多信息即将到来...查看源代码。

TODO

  • 在这里写基本信息
  • 在这里写更多信息
  • 创建测试
  • 测试所有提供的功能
  • 添加 artisan 命令以创建可翻译模型的迁移
  • 在 _lls 表中将 id 主键替换为 [item_id, locale] 组合主键
  • 添加选择 复数单数 表后缀(例如,things_lls 与 thing_lls)的能力

附加信息

基于 dimsav/laravel-translatable。但我觉得为每个可翻译的项目创建相同的模型太麻烦了,所以几乎完全重写了这个包。

请随意以任何方式做出贡献!