ngocnh / translator
Laravel多语言Eloquent对象翻译器。
Requires
- php: >=5.5.9
- illuminate/support: 5.0.*|5.1.*
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-18 09:55:45 UTC
README
此包提供了一种轻松将Eloquent模型翻译成多种语言的方法。
// Display the default title for an Eloquent object.
echo $foo->title;
// Change the current language to Swedish.
App::setLocale('sv');
// Display the translated title in Swedish.
echo $foo->title;
安装
使用Composer在项目的根目录中要求此包。
composer require ngocnh/translator
将服务提供者添加到config/app.php
文件中的提供者数组中。
'Ngocnh\Translator\TranslatorServiceProvider'
配置
Laravel翻译器需要配置。要开始,您需要发布所有供应商资源
php artisan vendor:publish
这将在您的应用程序中创建一个config/translator.php
文件,您可以修改它以设置配置。同时,请确保检查此包中原始配置文件在版本之间的更改。
这还会在您的database/migrations
目录中创建一个默认的本地化迁移。
本地化Eloquent模型
此选项locale
是Locale
Eloquent对象的完全命名空间路径。
本地化标识符列
此选项column
是您在locales
表中想要比较应用程序当前设置本地化的列。此列与App::getLocale()
方法进行比较,以获取翻译。
回退支持
此选项fallback
检查您是否希望在当前翻译不存在时使用回退翻译。
文档
以下是关于迁移、模型、种子和模板的示例。还有一个示例应用程序,您可以用作参考。
迁移
这是一个本地化迁移的示例。
Schema::create('locales', function(Blueprint $table)
{
$table->increments('id');
$table->string('language', 2); // en, sv, da, no, etc.
$table->timestamps();
});
此迁移示例与此包一起提供。当您运行endor:publish
时,默认本地化迁移将添加到您的database/migrations
目录。
添加您想要翻译的基表的Laravel迁移。
Schema::create('articles', function(Blueprint $table)
{
$table->increments('id');
$table->string('thumbnail');
$table->timestamps();
});
添加可翻译关系的Laravel迁移。
Schema::create('article_translations', function(Blueprint $table)
{
$table->increments('id');
// Translatable attributes
$table->string('title');
$table->string('content');
// Translatable attributes
$table->integer('article_id')->unsigned()->index();
$table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');
$table->integer('locale_id')->unsigned()->index();
$table->foreign('locale_id')->references('id')->on('locales')->onDelete('cascade');
$table->unique(['article_id', 'locale_id']);
$table->timestamps();
});
模型
首先,您需要设置Locale
Eloquent模型。然后将Locale
模型路径添加到配置文件中。
<?php
namespace Acme\Locales;
use Illuminate\Database\Eloquent\Model;
class Locale extends Model
{
/**
* @var array
*/
protected $fillable = ['language'];
}
这是一个可翻译的Laravel Eloquent模型的示例。请记住,填充$fillable
数组以包含可翻译属性。
<?php
namespace Acme\Articles;
use Illuminate\Database\Eloquent\Model;
use Ngocnh\Translator\Translatable;
use Ngocnh\Translator\Contracts\Translatable as TranslatableContract;
class Article extends Model implements TranslatableContract
{
use Translatable;
/**
* @var array
*/
protected $fillable = ['title', 'content', 'thumbnail'];
/**
* @var string
*/
protected $translator = 'Acme\Articles\ArticleTranslation';
/**
* @var array
*/
protected $translatedAttributes = ['title', 'content'];
}
ArticleTranslation基本上是一个空的Eloquent对象。
<?php
namespace Acme\Articles;
use Illuminate\Database\Eloquent\Model;
class ArticleTranslation extends Model {}
种子
在您开始用翻译填充数据库之前,您需要向您想要支持的本地化表中添加语言。下面是一个示例种子。
<?php
use Acme\Locales\Locale;
use Illuminate\Database\Seeder;
class LocaleTableSeeder extends Seeder
{
public function run()
{
$languages = ['en', 'sv', 'no'];
foreach ($languages as $language)
{
Locale::create(compact('language'));
}
}
}
模板
这就完成了!现在您可以做了
<h1>{{ $article->title }}</h1>
<img src="{{ $article->thumbnail }}">
<p>{{ $article->content }}</p>
如果您想要获取不是当前翻译的特定翻译,您可以在translate方法中指定它,如下面的示例所示。
<h1>{{ $article->translate('sv')->title }}</h1>
<img src="{{ $article->thumbnail }}">
<p>{{ $article->translate('sv')->content }}</p>
示例
如果您想看到一个工作示例,可以访问此包的示例仓库。这是一个利用翻译包的Laravel 5应用程序。
许可
Laravel翻译器根据MIT许可(MIT)许可。