naltingia / laravel-i18n
一个有观点的Laravel模型国际化包。
1.1.4
2019-05-31 07:36 UTC
Requires
- php: ^7.2
- laravel/framework: ~5.8.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^3.8.0
- phpunit/phpunit: ^8.0
README
I18n是一个有观点的包,用于为Laravel模型添加国际化。
安装
您可以通过composer安装此包
composer require nalingia/laravel-i18n
Laravel将发现相关的服务提供者。
用法
此包包含一个可立即使用的迁移,以启用您的模型进行国际化。要创建迁移,请运行
php artisan i18n:table
然后
php artisan migrate
它提供了最小配置。您可以使用以下命令发布
php artisan vendor:publish --provider="Nalingia\I18n\I18nServiceProvider" --tag="config"
以在模型中启用国际化,请按照以下简单步骤操作
- 将
Nalingia\I18n\Traits\HasI18n
特性导入到您的模型中。 - 添加一个名为
$catalogueAttributes
的公共属性:它将包含所有将被翻译的属性。 - 当使用Lavavel 5.6或以下版本时,将
'catalogueItems'
添加到模型中的$with
数组。从Laravel 5.7开始,导入的特性可以在模型启动时初始化所需的一切。HasI18n可以附加'catalogueItems'
到$with
和$hidden
数组。
以下是一个设置示例
use \Nalingia\I18n\Traits\HasI18n; class Article extends Model { use HasI18n; public $catalogueAttributes = [ 'title', 'abstract', 'content', ]; }
翻译管理
有多种方法可以访问属性本地化,但最简单的一种是与当前应用程序区域相关联的
$article->title
您也可以使用此方法来访问翻译
public function getCatalogueItem(string $attribute, string $locale) : string
获取目录项
访问当前应用程序区域的翻译就像访问模型属性一样简单
$article->title // or $article->abstract
如果您想访问不同区域的翻译,您可以调用translate(string $key, string $locale)
$article->translate('title', 'it')
或
$article->getCatalogueItem('title', 'it')
检索所有目录项
您可以通过调用getCatalogueItems()
来获取模型的所有可用目录项,无需提供任何参数
$article->getCatalogueItems()
或者,您可以使用访问器
$article->translations
检索所有可用区域
您可以通过调用getCatalogueLocales()
来获取至少有一个目录项的所有可用区域
$article ->setCatalogueItem('title', 'en', 'English title') ->setCatalogueItem('abstract', 'en', 'English abstract') ->setCatalogueItem('title', 'it', 'Italian title') ->setCatalogueItem('abstract', 'it', 'Italian abstract') ->setCatalogueItem('abstract', 'de', 'German abstract'); $article->getCatalogueLocales(); // ['it', 'en', 'de']
设置目录项
为当前应用程序区域设置翻译就像设置模型属性一样简单
$article->title = 'Super cool title'; // or $article->abstract = 'Exciting abstract...';
如果您想在不同于应用程序区域的区域翻译,您可以调用setCatalogueItem(string $key, string $locale, $value)
$article ->setCatalogueItem('title', 'en', 'English title') ->setCatalogueItem('abstract', 'en', 'English abstract') ->setCatalogueItem('title', 'it', 'Italian title') ->setCatalogueItem('abstract', 'it', 'Italian abstract');
删除目录项
您可以删除特定字段的翻译
public function forgetCatalogueItem(string $key, string $locale);
或者,您可以删除特定区域的全部翻译
public function forgetCatalogueItemsForLocale(string $locale);
创建模型
您可以在创建新模型时设置目录项
$article = Article::create([ 'title' => [ 'en' => 'English title', 'it' => 'Italian title', ], 'abstract' => [ 'en' => 'English abstract', 'it' => 'Italian abstract', ], ]);
或者,您可以通过不提供任何区域键来设置当前应用程序区域的目录项,只设置属性值。例如
// app()->getLocale() == 'de' $article = Article::create([ 'title' => 'German title' 'abstract' => 'German abstract', ]);
与以下相同
$article = Article::create([ 'title' => [ 'de' => 'German title', ], 'abstract' => [ 'de' => 'German abstract', ], ]);
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
测试
您可以使用以下命令运行测试
composer test
或
vendor/bin/phpunit
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。