mosaiqo/translatable

一个用于在Mongo中轻松实现多语言模型的Laravel包。

0.0.17 2015-10-20 10:56 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License

这是一个用于拥有多语言模型的Laravel 5包。它已准备好与MongoDB和Eloquent一起使用(计划使其也能与MySQL一起使用)。

此包是为了通过`embedsOne`关系轻松存储多语言模型而创建的。它是一个**即插即用**的包,如果您正在使用Laravel MongoDB

安装

通过composer安装

使用composer要求
 composer require mosaiqo/translatable

或将其放入您的composer.json文件中

{
...
	'require' : {
		...
		"mosaiqo/translatable": "dev-master"
	}
...

}
将此添加到您的config/app.php
 Mosaiqo\Translatable\TranslatableServiceProvider::class,
发布配置

如果您喜欢,可以更改这些值。

php artisan vendor:publish --provider="Mosaiqo\Translatable\TranslatableServiceProvider" --tag="config"

问题

Stories in Ready

我们仍在完善此包。如果您能给我们提供一些反馈,那将非常棒。

如果您发现一些错误或有想法,请随时创建一个新的问题

使用它

模型

  1. 您需要在希望具有多语言能力的模型中使用Mosaiqo\Translatable\Traits\Translatable
  2. 您还需要创建一个翻译模型。约定是使用您想要使用的模型的名称,并追加Locale(您可以在配置文件中覆盖它)。
  3. 您还可以指定用于翻译的模型,如果不设置,则默认搜索带有当前modelname的模型并追加Locale
  4. 使用protected $translatableAttributes设置您希望可翻译的属性。
<?php namespace App;

use Jenssegers\Mongodb\Model;

class Article extends Model 
{

    use \Mosaiqo\Translatable\Traits\Translatable;

    protected $fillable = ['commentable'];

	/**
	 * This are the attributes you want to have in multiple languages.
	 */
	protected $translatableAttributes = ['title', 'slug'];

	
	/**
	 * This is optional by default it will search for App\ArticleLocale.
	 */ 
	protected $translationModel = 'Mosaiqo\Translatable\Tests\Models\ArticleLocale'; 
	

}

翻译模型应类似于这个。对于MassAssignment,必须使属性可填充。

<?php namespace App;

use Jenssegers\Mongodb\Model;

class ArticleLocale extends Eloquent 
{

    protected $fillable = ['title', 'slug'];

}

文档

创建多语言模型

就像普通模型一样简单,唯一的区别是您需要在一个数组中传递可翻译的属性,其中键是区域值。

$article = Article::create([
	'commentable' => true,
	'published'   => true,
	'en' => [
		'title' => 'My title',
		'body'  => 'This is the text for my new post ...'
	]
]);

还有一个方法,您可以先创建模型,然后分配翻译。

$article = Article::create([
	'commentable' => true
]);
	
	
$article->en([
	'title' => 'My title',
	'body'  => 'This is the text for my new post ...'
]);

$article->es([
	'title' => 'Mi titulo',
	'body'  => 'Este es mi texto para mi nuevo post ...'
]);	

获取翻译

假设您在DDBB中有一个模型。

$article = Article::first();

这将输出您使用的语言的属性,在这个特定的例子中,es()将返回'Mi titulo'。

echo $article->es()->title; 

这里是'My title'。

echo $article->en()->title; 	

您还可以将其分配给变量以供以后使用。

$article_es = $article->es();
$article_en = $article->en();

如果您喜欢更详细的方式,也可以。

$article->translate('es')->title;	

如果翻译不存在,不要紧,您可以尝试使用默认的回退语言,如果所需的语言不可用,只需传递第二个参数true

$article->translate('de', true)->title;

或者您可以使用它的别名

$article->translateOrDefault('de')->title;

您还可以为这次调用设置回退语言,如果您想显示不同的语言。

$article->translate('de', 'es')->title;

您还可以知道模型是否有翻译。这将返回true/false。

$article->hasTranslation('fr');
$article->hasTranslation('en');

// or

$article->isTranslated('en');
$article->isTranslated('ca');

您还可以获取整个翻译实例,它将返回一个ArticleLocale的集合。

$article->translations();