mosaiqo / translatable
一个用于在Mongo中轻松实现多语言模型的Laravel包。
0.0.17
2015-10-20 10:56 UTC
Requires
- php: >=5.4.0
- illuminate/support: ~5.0
- jenssegers/mongodb: ^2.1
Requires (Dev)
- mockery/mockery: 0.9.*
- orchestra/testbench: ~3.0
- phpunit/phpunit: ~4.0
README
这是一个用于拥有多语言模型的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"
问题
我们仍在完善此包。如果您能给我们提供一些反馈,那将非常棒。
如果您发现一些错误或有想法,请随时创建一个新的问题。
使用它
模型
- 您需要在希望具有多语言能力的模型中使用
Mosaiqo\Translatable\Traits\Translatable
。 - 您还需要创建一个翻译模型。约定是使用您想要使用的模型的名称,并追加
Locale
(您可以在配置文件中覆盖它)。 - 您还可以指定用于翻译的模型,如果不设置,则默认搜索带有当前
modelname
的模型并追加Locale
。 - 使用
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();