administrcms / localization
此软件包最新版本(0.1)没有提供许可信息。
0.1
2019-10-25 05:56 UTC
Requires
- php: >=5.5.9
- laravel/framework: >=5.2
This package is auto-updated.
Last update: 2024-08-24 22:45:32 UTC
README
尽管它是为与aministr包一起使用而编写的,但您可以使用此包与Laravel 5.2独立使用。
它仍在开发中。
安装
使用 Composer
composer require administrcms/localization
添加服务提供者
\Administr\Localization\LocalizationServiceProvider::class,
外观
'Locale' => \Administr\Localization\LocalizationFacade::class,
在您的App Kernel中注册中间件,并确保在注册它之前注册会话中间件
\Administr\Localization\LocalizationMiddleware::class,
它做什么
它基本上检查并持久化当前语言到会话中,并假设您在路由中使用参数来指定语言。如果您使用不同的方法来更改语言,您可以注册自己的中间件并利用此包中包含的Localizator类。
它还创建了一个用于存储可用语言的表,并在命名空间 Administr\Localization\Language
下有一个Language模型。如果您数据库中有多语言数据,它还提供了一个 Translatable
模型,该模型扩展了基本Eloquent模型并增加了翻译功能。
可翻译模型的使用
您需要创建两个表 - 一个用于存储非可翻译的主要模型数据,另一个用于存储翻译。
它们可能看起来像这样
Schema::create('people', function (Blueprint $table) { $table->increments('id'); $table->boolean('is_visible')->default(0); $table->timestamps(); }); Schema::create('people_translations', function (Blueprint $table) { $table->increments('id'); $table->integer('language_id')->unsigned(); $table->integer('person_id')->unsigned(); $table->string('name', 100); $table->string('position', 100); $table->timestamps(); $table->foreign('language_id')->references('id')->on('administr_languages')->onDelete('cascade'); $table->foreign('person_id')->references('id')->on('people')->onDelete('cascade'); });
相应的模型
// Person.php namespace App\Models; use Administr\Localization\Models\Translatable; class Person extends Translatable { protected $table = 'people'; protected $fillable = ['is_visible', 'name', 'position']; protected $translatable = ['name', 'position']; } // PersonTranslation.php use Illuminate\Database\Eloquent\Model; class PersonTranslation extends Model { protected $table = 'people_translations'; protected $fillable = ['language_id', 'name', 'position']; }
然后在您的应用程序代码中
// Get the first model with translation in the current app locale $person = Person::translated()->first(); // Translated in the language with id of 1 $person = Person::translated(1)->first(); // Translated in the language with code of 'bg'. // Have in mind that when you do it like this, // an additional query will be made to find the language id. $person = Person::translated('bg')->first(); $person->name; // You can access the translation model properties through the main model // Create an instance of the main model // with a translation in the current locale. // If you do not pass translatable fields, // only the main model will be persisted. Person::create([ 'name' => 'Miroslav Vitanov', 'position' => 'Developer', ]); // Updates the model and the translation that was // created in the current locale. Person::find(1)->update([ 'name' => 'Miroslav Vitanov', 'position' => 'PHP Developer', ]); // Translate a model in another language. // You can pass a locale code or language id. Person::find(1)->translate('bg') ->fill([ 'name' => 'Мирослав Витанов', 'position' => 'Програмист', ]) ->save(); // Check if any translations exist $person->hasTranslations(); // Check if a translation with language id exists $person->isTranslatedIn(1); // Get all translations $person->translations; // When a model is serialized to an array, // it will include the current translation $person->toArray();