Laravel Packages

Store your translations in the database with Laravel translation loader package

Published
Store your translations in the database with Laravel translation loader package image

Laravel has built-in support for localization using arrays stored in language files and in 5.4 they are adding the ability for JSON based language files.

Some applications are better suited to have the language strings stored in the database so that end users can change them through a custom user interface, and that’s where the Laravel translation loader package can be helpful.

Let’s take a look at how this package can be set up and used.

Installation

First, install Laravel translation loader through Composer:

composer require spatie/spatie/laravel-translation-loader

Next, open your config/app.php and replace Laravel’s translation service provider:

Illuminate\Translation\TranslationServiceProvider::class,

with Laravel translation loader service provider:

Spatie\TranslationLoader\TranslationServiceProvider::class,

Then publish Laravel translation loader migration file:

php artisan vendor:publish --provider="Spatie\TranslationLoader\TranslationServiceProvider" --tag="migrations"

Finally, run the migrations, it will create a new table called language_lines in the database which will hold your application translations:

php artisan migrate

Overview

After you complete the installations, adding a new language line to the database will be easy as this:

use Spatie\TranslationLoader\LanguageLine;
 
LanguageLine::create([
'group' => '<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>',
'key' => 'hello',
'text' => ['en' => 'Hello', 'ar' => 'السلام عليكم ورحمة الله وبركاته', 'es' => 'Hola'],
]);

And to fetch the translation from the database, use the default Laravel trans function like this:

echo trans('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.hello');
// Will return 'Hello' if the locale is English and Will return 'السلام عليكم ورحمة الله وبركاته' if the locale is Arabic

Or you can use blade syntax and @lang directive like this:

{{ trans('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.hello') }}
// Or
@lang('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.hello')

You can also use the parameter feature of laravel trans function which will allow you to use placeholders in the translations and replace it later by passing an array of replacements as the second argument to the trans function like this:

trans('<span id="result_box" class="short_text" lang="en"><span class="">greetings</span></span>.welcome', ['name' => 'Diaa'])

One nice feature of Laravel translation loader is allowing you to save your translations in both language files and the database at the same time. By default, it will look for the database version then fall back to the file. Another feature is that you can extend the package to support other translation providers like YAML, CSV, etc.

That’s it, if you want a very useful package that provides a clean and easy way to save your translations in the database, check out Laravel translation loader.

Diaa Fares photo

Laravel Artisan, Web Developer, Tech Geek

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Eloquent Refreshes: Load Generated Columns After Save image

Eloquent Refreshes: Load Generated Columns After Save

Read article
Laravel AI SDK 1.0 Adds Classification and Tool Approvals image

Laravel AI SDK 1.0 Adds Classification and Tool Approvals

Read article
Tagged Memoized Cache and Model Refreshes in Laravel 13.33 image

Tagged Memoized Cache and Model Refreshes in Laravel 13.33

Read article
Laravel Live Denmark 2026 Talks Are Now on YouTube image

Laravel Live Denmark 2026 Talks Are Now on YouTube

Read article
Live Stream: Building a Social Network in PHP in 48 Hours image

Live Stream: Building a Social Network in PHP in 48 Hours

Read article
Health for Laravel: Kubernetes Probes and Prometheus Metrics image

Health for Laravel: Kubernetes Probes and Prometheus Metrics

Read article