naltingia/laravel-i18n

一个有观点的Laravel模型国际化包。

1.1.4 2019-05-31 07:36 UTC

This package is auto-updated.

Last update: 2024-09-18 22:06:01 UTC


README

Latest Version on Packagist Build Status Software License Total Downloads

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"

以在模型中启用国际化,请按照以下简单步骤操作

  1. Nalingia\I18n\Traits\HasI18n特性导入到您的模型中。
  2. 添加一个名为$catalogueAttributes的公共属性:它将包含所有将被翻译的属性。
  3. 当使用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)。请参阅许可证文件以获取更多信息。