escapework/laravel-translations

帮助您轻松翻译Laravel模型的包

0.1.0 2016-10-03 14:04 UTC

This package is auto-updated.

Last update: 2024-08-29 04:40:03 UTC


README

StyleCI Status Software License Latest Stable Version Total Downloads

轻松将Laravel模型翻译成所需语言。

安装

将以下行添加到您的 composer.json 文件中

    "escapework/laravel-translations": "0.2.*"

并将以下服务提供者添加到您的Laravel提供者中

    EscapeWork\Translations\TranslationServiceProvider::class

运行以下命令以发布迁移

$ php artisan vendor:publish --provider="EscapeWork\Translations\TranslationServiceProvider"
$ php artisan migrate

用法

创建本地化

首先,您需要创建将进行翻译的模型本地化。

EscapeWork\Translations\Locale::create(['id' => 'pt-br', 'title' => 'Português (Brasil)']);
EscapeWork\Translations\Locale::create(['id' => 'en',    'title' => 'English']);

然后,您需要在模型中导入 Translatable

use EscapeWork\Translations\Translatable;
...

class Product extends Model
{

    use Translatable;
}

存储翻译

要存储翻译,您可以执行以下操作

// $data can have as many fields you want
$data = [
    'title'       => 'My translated title',
    'description' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit',
];

$product->storeTranslation((array) $data, 'pt-br');

以下是如何使用Laravel $request 对象的示例。

$product = Product::find(1);

foreach ((array) $request->translations as $locale => $data) {
    $product->storeTranslation((array) $data, $locale);
}

从模型中删除翻译

$product->deleteTranslations();

获取翻译

要获取现有翻译,只需这样做

$product = Product::find(1);
echo $product->translations->_get('title'); // this will get the translation for the current config('app.locale') value

如果您需要特定区域的翻译,只需将区域作为第二个参数传递

$product = Product::find(1);
echo $product->translations->_get('title', 'pt-br');

如果不传递 $locale,则默认值为 config('app.locale') 的值。

您也可以这样做来使生活更加容易

class Product extends Model
{
    ...
    public function getTitleAttribute()
    {
        return $this->translations->_get('title');
    }
    ...
}

// then, just call like a simple field
echo $product->title;

下一步

  • 测试;
  • 利用MySQL 5.7 JSON类型,其中翻译中的搜索将可用;

许可

查看许可文件。