skachinsky / locale-translator
Library for Laravel. For tables from the database, the required field is returned based on the current locale.
Requires
- php: ^7.4
- illuminate/support: ^8.0
This package is auto-updated.
Last update: 2025-06-08 21:19:38 UTC
README
Locale Translator - это простой Eloquent трейт и таблица базы данных для Laravel, который добавляет translateAttribute()
метод. Он помогает в случаях, когда объект модели подразумевает разные варианты значений для разных локалей.
Установка
Установка с использованием Composer:
composer require skachinsky/locale-translator
Далее необходимо запустить команду в корневой директории проекта:
php artisan vendor:publish --provider="Skachinsky\LocaleTranslator\LocaleTranslatorServiceProvider"
После чего запустить миграцию:
php artisan migrate
В итоге создастся таблица translates
.
Использование
Предположим, у вас имеется таблица-справочник с видами домашних животных:
pet_types
id | slug |
---|---|
1 | dog |
2 | cat |
3 | hamster |
Вам необходимо заранее внести в таблицу translates
значения.
Как например, можно использовать такой код:
use Skachinsky\LocaleTranslator\Models\Translate; $petType = PetType::find(1); Translate::create([ "type"=>$petType->getModelName(), "row_id"=>$petType->id, "locale"=>"en", "value"=>"dog" ]); Translate::create([ "type"=>$petType->getModelName(), "row_id"=>$petType->id, "locale"=>"ru", "value"=>"собака" ]); //и т.д. для каждой строки pet_types
Теперь, для того чтобы выдать клиенту значение справочника в зависимости от текущей локали, необходимо в моделе подключить трейт:
namespace App\Models; use Skachinsky\LocaleTranslator\LocaleTranslator; class PetType extends Model { use LocaleTranslator; /*...*/ public function getTitleAttribute() { return $this->translateAttribute($this->slug); } }