gertjanroke/translations

该软件包最新版本(1.0.0)没有提供许可证信息。

多语言:轻松实现数据库多语言化

1.0.0 2016-10-04 19:36 UTC

This package is auto-updated.

Last update: 2024-09-07 07:24:23 UTC


README

多语言化:轻松实现数据库多语言化

安装

composer require gertjanroke/translations

安装后

发布文件

如果你的所有模型都直接位于你的应用文件夹中,并且使用laravel约定,你不需要发布配置文件。但如果你的做法与这种约定不符,比如将你的模型放在自己的文件夹中。那么你需要发布配置文件,并定义你的翻译模型存储的位置。

如果需要发布配置文件,那么在运行发布命令之前,先做以下事情。

将以下行添加到 config/app.php

providers 部分

'providers' => [
	...
	Gertjanroke\Notification\NotificationServiceProvider::class,
	...
],

要发布配置文件,请运行以下命令

php artisan vendor:publish --provider="Gertjanroke\Notification\NotificationServiceProvider"

用法

现在来点有趣的。

要使用翻译特性,你只需要在你的模型类中添加一个 use。你可以通过

class Page extends Model
{
	...
	use Translations;
	...
}

并在你的类上方添加 use 来实现

...
use Gertjanroke\Translations\Traits\Translations;

class Page extends Model
{
	...

现在你几乎完成了。

你需要做的唯一一件事是为你刚刚添加特性的模型创建一个翻译模型。

例如

class PageTranslations extends Model
{
    //
}

重要的是,这个包默认使用上面的模型名称。如果你想覆盖这个设置,只需编辑配置文件即可。

保存翻译

你需要做的第一件事是检查哪种方式最适合你。这个包附带了一个默认请求属性,它通过循环保存每个区域的所有值。此格式如下

<input type="text" name="trans[<locale>][<attribute>]">

如果你不喜欢关键字 trans,你可以轻松地在配置中更改它。例如

<input type="text" name="translations[<locale>][<attribute>]">

或者

<input type="text" name="i18n[<locale>][<attribute>]">

或者你喜欢的方式。

在制作完你的表单后,现在你需要保存数据。这个包提供了两种方法来做到这一点。只需从你的模型中调用以下函数,并附带请求对象,如下所示

public function store(Request $request)
{
	...
	$page = new Page();
	$page->saveTranslations($request);
	...
}

或简短版本

public function store(Request $request)
{
	...
	$page = new Page();
	$page->saveTrans($request);
	...
}

然后包将在你的数据库表中创建一个新的行,或者更新现有的行。

魔法函数

这个包还附带两个方便的函数,让你可以执行以下操作

$page->title

并且它将检查该属性是否存在于你的翻译表中。如果存在,值将以应用程序当前区域返回。

另一个魔法函数是动态获取器。让我们以上面的例子作为方法。

$page->getTitle();

这将像上面的函数一样获取标题,但现在你可以指定你想要的给定属性的特定区域版本。

$page->getTitle('en');

你可以将 'en' 改为你需要的区域。

自定义外键

如果你不喜欢laravel处理外键的方式,并想使用你自己的约定,可以通过在主模型中设置 transForeignKey 变量来实现。例如

...
use Gertjanroke\Translations\Traits\Translations;

class Page extends Model
{
	...
	use Translations;

    protected $transForeignKey = 'pages_id';
    ...
}