ngocnh/translator

Laravel多语言Eloquent对象翻译器。

安装: 1 218

依赖项: 0

建议者: 0

安全: 0

星星: 0

分支: 0

2.2.0 2015-08-19 07:44 UTC

This package is not auto-updated.

Last update: 2024-09-18 09:55:45 UTC


README

laravel-translator

此包提供了一种轻松将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模型

此选项localeLocale 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)许可。