jvdlaar/laravel-content-translation

一个用于翻译模型属性的 Laravel 5 包。

v1.0.0-alpha1 2017-04-07 12:14 UTC

This package is not auto-updated.

Last update: 2024-09-15 02:37:41 UTC


README

Latest Version Software License Total Downloads

Laravel 内容翻译

此包可以使模型的属性可翻译。例如,当您有一个国家模型时,您可以使其国家名称可翻译。

待办事项

  • 添加添加翻译的用户界面。
  • 添加测试
  • 禁用“静态翻译”的方法。

安装

此包可以通过 Composer 安装。

composer require jvdlaar/laravel-content-translation

您必须安装此服务提供者。

// config/app.php
'providers' => [
    ...
    JvdLaar\ContentTranslation\ContentTranslationServiceProvider::class,
    ...
];

此包还包含一个门面,它提供了一种调用类的简单方法。

// config/app.php
'aliases' => [
    ...
    'ContentTranslation' => JvdLaar\ContentTranslation\ContentTranslationFacade::class,
    ...
];

您可以使用以下命令发布此包的配置文件

php artisan vendor:publish --provider="JvdLaar\ContentTranslation\ContentTranslationServiceProvider"

以下配置文件将发布到 config/content-translation.php

return [
  'fallback_language' => 'en',

  'country' => [
    'class' => \App\Models\Country::class,
    'label_property' => 'name',
    'properties' => [
      'name' => ['required' => TRUE],
      'nationality' => ['required' => TRUE],
    ],
  ],

  'page' => [
    'class' => \App\Models\Test::class,
    'label_property' => 'title',
    'properties' => [
      'title' => ['required' => TRUE],
      'body' => ['nl2br' => TRUE],
    ],
  ],
];

数组键是存储在数据库中的翻译键,"class" 指的是模型类。 "label_property" 用于确定此模型的可翻译标签。例如,国家模型中的国家名称。"properties" 是一个数组,包含可翻译的属性以及它们是否必需以及它们的输出是否需要 nl2br。

用法

安装和配置完成后,您需要通过实现 TranslatableContract 使模型可翻译。HasTranslatables 特性有助于此。

示例模型

namespace App\Models;

use App\Base\Model;
use App\Contracts\TranslatableContract;
use App\Models\Traits\HasTranslatables;

class Country extends Model implements TranslatableContract {

  use HasTranslatables;

  protected $table = 'countries';
  protected $fillable = ['code', 'admin_name'];
  public $timestamps = FALSE;
  public $users = FALSE;



  /**
   * ATTRIBUTES
   */

  /**
   * Getter for 'name'.
   */
  public function getNameAttribute() {
    return $this->displayTranslation('name', TRUE);
  }

  /**
   * Getter for 'nationality'.
   */
  public function getNationalityAttribute() {
    return $this->displayTranslation('nationality', TRUE);
  }

  /**
   * Return an default for a property in this content.
   */
  protected function getTranslationDefault($property) {
    return $this->admin_name;
  }

}

在上面的示例中,$country->name 和 $country->nationality 被翻译。如果没有在数据库中找到翻译,则使用 admin_name 属性作为回退。函数 displayTranslation 的第二个参数表示应该使用默认值。第三个参数是翻译的本地化,默认情况下将使用当前应用程序的本地化。第四个参数确定是否使用回退语言,此回退语言在配置中设置。

对多个模型进行预加载翻译。

Country::eagerLoadTranslations([1, 2, 3], 'nl');
dump(Country::find(1)->name);

在上面的示例中,预加载了 3 个国家。因此,稍后加载模型并请求翻译不需要额外的查询。

保存翻译

您可以使用门面将翻译添加到数据库中

\ContentTranslation::saveTranslation('country', $country->id, 'name', 'nl', 'Nederland');

或者通过模型上的方法使用

$country->saveTranslation('nl', ['name' => 'Nederland', 'nationality' => 'Nederlander']);

安全

如果您发现任何与安全相关的问题,请通过电子邮件 johnny@ezcompany.nl 联系,而不是使用问题跟踪器。

关于 ezCompany

ezCompany 是一家位于荷兰蒂尔堡、布雷达和乌得勒支的 Web 开发代理机构。有关更多信息,请参阅 我们的网站

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件